From 268f533dd0f761c6a135021ff40542beda3aac23 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Tue, 10 Oct 2017 13:50:01 +0200 Subject: [PATCH 001/138] start on openml dataset loader --- sklearn/datasets/openml.py | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 sklearn/datasets/openml.py diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py new file mode 100644 index 0000000000000..fefeb4aa62203 --- /dev/null +++ b/sklearn/datasets/openml.py @@ -0,0 +1,78 @@ +import json +import warnings +import numpy as np +import numbers + +try: + # Python 2 + from urllib2 import urlopen +except ImportError: + # Python 3+ + from urllib.request import urlopen + +from scipy.io.arff import loadarff + +_SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" + +jsons = "https://openml.org/api/v1/json/data/list/data_name/{}" +data_dl = "https://www.openml.org/data/download/{}" + + +def _get_data_info_by_name(name): + url_path = urlopen(_SEARCH_NAME.format(name)) + json_data = json.load(url_path) + return json_data['data']['dataset'][0] + + +def fetch_openml(name_or_id=None, version=1, json_loc=jsons, + data_loc=data_dl): + """Fetch dataset from openml by name or dataset id. + + Parameters + ---------- + + Returns + ------- + """ + if isinstance(name_or_id, numbers.Integral): + if version != 1: + raise ValueError( + "Dataset id={} and version={} passed, but you can only " + "specify a numeric id or a version, not both.".format( + name_or_id, version)) + data_id = name_or_id + elif isinstance(name_or_id, str): + name = name_or_id + + else: + raise TypeError( + "Invalid name_or_id {}, should be string or integer.".format( + name_or_id)) + + json_dl = urlretrieve(json_loc.format(name))[0] + # get the json file + with open(json_dl, 'r') as tmp: + json_data = json.load(tmp)['data']['dataset'] + vers = [(idx, val) for idx, item in enumerate(json_data) + for key, val in item.items() if key == "version"] + # tell user there are more versions if they dont specify number + if len(vers) > 1 and name_vers is None: + msg = ("dataset: {} has versions {}, " + "default is {}").format(name, + [i[1] for i in vers], + min([i[1] for i in vers])) + warnings.warn(msg) + # check if the version specified (if it is) is in the ones gotten + use = 1 if name_vers is None else name_vers + for v in vers: + if v[1] == use: + to_get = json_data[v[0]]['file_id'] + # download data + data_tmp = urlretrieve(data_loc.format(to_get))[0] + # load the data + data = loadarff(data_tmp) + data_fmt = np.zeros((data[0].shape[0], len(data[0][0])), dtype=object) + # scipy returns a tuple so try to put it in the right format + for idx, row in enumerate(data[0]): + data_fmt[idx, :] = [val for val in row] + return data_fmt From 4f3e93e1cbed32acc7fb3f9921a65fa414fc8f6b Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 11 Oct 2017 14:18:02 +0200 Subject: [PATCH 002/138] working on stuff --- sklearn/datasets/openml.py | 43 +++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index fefeb4aa62203..a4e78fa352caf 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -2,6 +2,8 @@ import warnings import numpy as np import numbers +import os +from os.path import join, exists try: # Python 2 @@ -11,29 +13,51 @@ from urllib.request import urlopen from scipy.io.arff import loadarff +from .base import get_data_home _SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" - -jsons = "https://openml.org/api/v1/json/data/list/data_name/{}" -data_dl = "https://www.openml.org/data/download/{}" +_DATA_INFO = "https://openml.org/api/v1/json/data/{}" +_DATA_DOWNLOAD = "https://www.openml.org/data/download/{}" def _get_data_info_by_name(name): - url_path = urlopen(_SEARCH_NAME.format(name)) + url_path = urlopen(_SEARCH_NAME.format(name)) json_data = json.load(url_path) return json_data['data']['dataset'][0] -def fetch_openml(name_or_id=None, version=1, json_loc=jsons, - data_loc=data_dl): +def _get_data_description_by_id(data_id): + url_path = urlopen(_DATA_INFO.format(data_id)) + json_data = json.load(url_path) + return json_data['data_set_description'] + + +def fetch_openml(name_or_id=None, version=1, data_home=None): """Fetch dataset from openml by name or dataset id. Parameters ---------- + data_home : optional, default: None + Specify another download and cache folder for the data sets. By default + all scikit-learn data is stored in '~/scikit_learn_data' subfolders. + Returns ------- + + data : Bunch + Dictionary-like object, the interesting attributes are: + 'data', the data to learn, 'target', the classification labels, + 'DESCR', the full description of the dataset, and + 'COL_NAMES', the original names of the dataset columns. """ + data_home = get_data_home(data_home=data_home) + data_home = join(data_home, 'openml') + if not exists(data_home): + os.makedirs(data_home) + + # check if dataset id is known + if isinstance(name_or_id, numbers.Integral): if version != 1: raise ValueError( @@ -42,13 +66,18 @@ def fetch_openml(name_or_id=None, version=1, json_loc=jsons, name_or_id, version)) data_id = name_or_id elif isinstance(name_or_id, str): - name = name_or_id + data_info = _get_data_info_by_name(name_or_id) + data_id = data_info['did'] else: raise TypeError( "Invalid name_or_id {}, should be string or integer.".format( name_or_id)) + + data_description = _get_data_description_by_id(data_id) + + # download actual data json_dl = urlretrieve(json_loc.format(name))[0] # get the json file with open(json_dl, 'r') as tmp: From fabaa90a563ea578d68425ddaef06559815e3db7 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 09:47:13 +0200 Subject: [PATCH 003/138] first version working --- sklearn/datasets/openml.py | 76 ++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index a4e78fa352caf..99865d4dfa8b7 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -1,9 +1,8 @@ import json -import warnings -import numpy as np import numbers import os from os.path import join, exists +from http.client import IncompleteRead try: # Python 2 @@ -13,7 +12,12 @@ from urllib.request import urlopen from scipy.io.arff import loadarff +import numpy as np + from .base import get_data_home +# from ..externals.joblib import Memory +from ..externals.six import StringIO +from ..utils import Bunch _SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" _DATA_INFO = "https://openml.org/api/v1/json/data/{}" @@ -21,18 +25,18 @@ def _get_data_info_by_name(name): - url_path = urlopen(_SEARCH_NAME.format(name)) - json_data = json.load(url_path) + json_string = urlopen(_SEARCH_NAME.format(name)) + json_data = json.load(json_string) return json_data['data']['dataset'][0] def _get_data_description_by_id(data_id): - url_path = urlopen(_DATA_INFO.format(data_id)) - json_data = json.load(url_path) + json_string = urlopen(_DATA_INFO.format(data_id)) + json_data = json.load(json_string) return json_data['data_set_description'] -def fetch_openml(name_or_id=None, version=1, data_home=None): +def fetch_openml(name_or_id=None, version=1, data_home=None, memory=True): """Fetch dataset from openml by name or dataset id. Parameters @@ -53,6 +57,11 @@ def fetch_openml(name_or_id=None, version=1, data_home=None): """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') + # if memory: + # mem = Memory(join(data_home, 'cache')) + # _get_data_info_by_name = mem(_get_data_info_by_name) + # _get_data_description_by_id = mem(_get_data_description_by_id) + # _download_data = mem(_download_data) if not exists(data_home): os.makedirs(data_home) @@ -74,34 +83,31 @@ def fetch_openml(name_or_id=None, version=1, data_home=None): "Invalid name_or_id {}, should be string or integer.".format( name_or_id)) - data_description = _get_data_description_by_id(data_id) + target_name = data_description['default_target_attribute'] # download actual data - json_dl = urlretrieve(json_loc.format(name))[0] - # get the json file - with open(json_dl, 'r') as tmp: - json_data = json.load(tmp)['data']['dataset'] - vers = [(idx, val) for idx, item in enumerate(json_data) - for key, val in item.items() if key == "version"] - # tell user there are more versions if they dont specify number - if len(vers) > 1 and name_vers is None: - msg = ("dataset: {} has versions {}, " - "default is {}").format(name, - [i[1] for i in vers], - min([i[1] for i in vers])) - warnings.warn(msg) - # check if the version specified (if it is) is in the ones gotten - use = 1 if name_vers is None else name_vers - for v in vers: - if v[1] == use: - to_get = json_data[v[0]]['file_id'] - # download data - data_tmp = urlretrieve(data_loc.format(to_get))[0] - # load the data - data = loadarff(data_tmp) - data_fmt = np.zeros((data[0].shape[0], len(data[0][0])), dtype=object) - # scipy returns a tuple so try to put it in the right format - for idx, row in enumerate(data[0]): - data_fmt[idx, :] = [val for val in row] - return data_fmt + response = urlopen(_DATA_DOWNLOAD.format(data_id)) + # we need to catch IncompleteRead which is likely a server-side issue + try: + data_arff = response.read() + except IncompleteRead as e: + data_arff = e.partial + # getting structured array and metadata + data, meta = loadarff(StringIO(data_arff.decode("utf-8"))) + columns = np.array(meta.names()) + data_columns = columns[columns != target_name] + # TODO: stacking the content of the structured array + # this results in a copy. If the data was homogeneous + # we could use a view instead. + X = np.column_stack(data[c] for c in data_columns) + y = data[target_name] + + description = "{}\n\nDownloaded from openml.org.".format( + data_description['description']) + + bunch = Bunch( + data=X, target=y, feature_names=data_columns, + DESCR=description) + + return bunch From 1804b14d0b2e7a6365a8e8c40d18eef8ba965eb0 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 10:35:28 +0200 Subject: [PATCH 004/138] docstrings, use version="active" as default --- sklearn/datasets/openml.py | 46 +++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 99865d4dfa8b7..6ab2a22678191 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -2,7 +2,7 @@ import numbers import os from os.path import join, exists -from http.client import IncompleteRead +from warnings import warn try: # Python 2 @@ -10,6 +10,7 @@ except ImportError: # Python 3+ from urllib.request import urlopen + from http.client import IncompleteRead from scipy.io.arff import loadarff import numpy as np @@ -24,8 +25,11 @@ _DATA_DOWNLOAD = "https://www.openml.org/data/download/{}" -def _get_data_info_by_name(name): - json_string = urlopen(_SEARCH_NAME.format(name)) +def _get_data_info_by_name(name, version): + if version == "active": + json_string = urlopen(_SEARCH_NAME.format(name + "/status/active/")) + else: + json_string = urlopen(_SEARCH_NAME.format(name)) json_data = json.load(json_string) return json_data['data']['dataset'][0] @@ -36,24 +40,41 @@ def _get_data_description_by_id(data_id): return json_data['data_set_description'] -def fetch_openml(name_or_id=None, version=1, data_home=None, memory=True): +def fetch_openml(name_or_id=None, version='active', data_home=None, + memory=True): """Fetch dataset from openml by name or dataset id. + Datasets are uniquely identified by either an integer ID or by a + combination of name and version (i.e. there might be multiple + versions of the 'iris' dataset). Newer versions are assumed to fix + issues in earlier versions. + Parameters ---------- + name_or_id : string or integer + Identifier of the dataset. If integer, assumed to be the id of the + dataset on OpenML, if string, assumed to be the name of the dataset. + + version : integer or 'active', default='active' + Version of the dataset. Only used if ``name_or_id`` is a string. + If 'active' the oldest version that's still active is used. data_home : optional, default: None Specify another download and cache folder for the data sets. By default all scikit-learn data is stored in '~/scikit_learn_data' subfolders. + memory : boolean, default=True + Whether to store downloaded datasets using joblib. + Returns ------- data : Bunch Dictionary-like object, the interesting attributes are: - 'data', the data to learn, 'target', the classification labels, - 'DESCR', the full description of the dataset, and - 'COL_NAMES', the original names of the dataset columns. + 'data', the data to learn, 'target', the regression target or + classification labels, 'DESCR', the full description of the dataset, + 'feature_names', the original names of the dataset columns, and + 'details' which provide more information on the openml meta-data. """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') @@ -66,7 +87,6 @@ def fetch_openml(name_or_id=None, version=1, data_home=None, memory=True): os.makedirs(data_home) # check if dataset id is known - if isinstance(name_or_id, numbers.Integral): if version != 1: raise ValueError( @@ -75,7 +95,7 @@ def fetch_openml(name_or_id=None, version=1, data_home=None, memory=True): name_or_id, version)) data_id = name_or_id elif isinstance(name_or_id, str): - data_info = _get_data_info_by_name(name_or_id) + data_info = _get_data_info_by_name(name_or_id, version) data_id = data_info['did'] else: @@ -84,6 +104,10 @@ def fetch_openml(name_or_id=None, version=1, data_home=None, memory=True): name_or_id)) data_description = _get_data_description_by_id(data_id) + if data_description['status'] != "active": + warn("Version {} of dataset {} is inactive, meaning that issues have" + " been found in the dataset. Try using a newer version.".format( + data_description['name'], data_description['version'])) target_name = data_description['default_target_attribute'] # download actual data @@ -104,10 +128,10 @@ def fetch_openml(name_or_id=None, version=1, data_home=None, memory=True): y = data[target_name] description = "{}\n\nDownloaded from openml.org.".format( - data_description['description']) + data_description.pop('description')) bunch = Bunch( data=X, target=y, feature_names=data_columns, - DESCR=description) + DESCR=description, details=data_description) return bunch From ffd43359ce73ec70172a39f83c1d4686c23bd1d9 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 10:43:19 +0200 Subject: [PATCH 005/138] add caching to openml loader --- sklearn/datasets/openml.py | 39 ++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 6ab2a22678191..608c6e68b7147 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -16,7 +16,7 @@ import numpy as np from .base import get_data_home -# from ..externals.joblib import Memory +from ..externals.joblib import Memory from ..externals.six import StringIO from ..utils import Bunch @@ -40,6 +40,17 @@ def _get_data_description_by_id(data_id): return json_data['data_set_description'] +def _download_data(data_id): + response = urlopen(_DATA_DOWNLOAD.format(data_id)) + # we need to catch IncompleteRead which is likely a server-side issue + try: + data_arff = response.read() + except IncompleteRead as e: + data_arff = e.partial + # getting structured array and metadata + return loadarff(StringIO(data_arff.decode("utf-8"))) + + def fetch_openml(name_or_id=None, version='active', data_home=None, memory=True): """Fetch dataset from openml by name or dataset id. @@ -78,11 +89,14 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') - # if memory: - # mem = Memory(join(data_home, 'cache')) - # _get_data_info_by_name = mem(_get_data_info_by_name) - # _get_data_description_by_id = mem(_get_data_description_by_id) - # _download_data = mem(_download_data) + if memory: + mem = Memory(join(data_home, 'cache'), verbose=0).cache + else: + mem = lambda x: x + _get_data_info_by_name_ = mem(_get_data_info_by_name) + _get_data_description_by_id_ = mem(_get_data_description_by_id) + _download_data_ = mem(_download_data) + if not exists(data_home): os.makedirs(data_home) @@ -95,7 +109,7 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, name_or_id, version)) data_id = name_or_id elif isinstance(name_or_id, str): - data_info = _get_data_info_by_name(name_or_id, version) + data_info = _get_data_info_by_name_(name_or_id, version) data_id = data_info['did'] else: @@ -103,7 +117,7 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, "Invalid name_or_id {}, should be string or integer.".format( name_or_id)) - data_description = _get_data_description_by_id(data_id) + data_description = _get_data_description_by_id_(data_id) if data_description['status'] != "active": warn("Version {} of dataset {} is inactive, meaning that issues have" " been found in the dataset. Try using a newer version.".format( @@ -111,14 +125,7 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, target_name = data_description['default_target_attribute'] # download actual data - response = urlopen(_DATA_DOWNLOAD.format(data_id)) - # we need to catch IncompleteRead which is likely a server-side issue - try: - data_arff = response.read() - except IncompleteRead as e: - data_arff = e.partial - # getting structured array and metadata - data, meta = loadarff(StringIO(data_arff.decode("utf-8"))) + data, meta = _download_data_(data_id) columns = np.array(meta.names()) data_columns = columns[columns != target_name] # TODO: stacking the content of the structured array From fe0904bcc15084bf35583957672135333007a037 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 11:40:55 +0200 Subject: [PATCH 006/138] pep8 annoyance --- sklearn/datasets/openml.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 608c6e68b7147..364ef90f83dd1 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -92,7 +92,8 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, if memory: mem = Memory(join(data_home, 'cache'), verbose=0).cache else: - mem = lambda x: x + def mem(func): + return func _get_data_info_by_name_ = mem(_get_data_info_by_name) _get_data_description_by_id_ = mem(_get_data_description_by_id) _download_data_ = mem(_download_data) From eea026e5d60ffa672eb58a54ea71407aae603a71 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 14:03:32 +0200 Subject: [PATCH 007/138] fix download url, allow datasets without target --- sklearn/datasets/openml.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 364ef90f83dd1..c1fc2f7af9b60 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -10,7 +10,7 @@ except ImportError: # Python 3+ from urllib.request import urlopen - from http.client import IncompleteRead + # from http.client import IncompleteRead from scipy.io.arff import loadarff import numpy as np @@ -22,13 +22,13 @@ _SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" _DATA_INFO = "https://openml.org/api/v1/json/data/{}" -_DATA_DOWNLOAD = "https://www.openml.org/data/download/{}" def _get_data_info_by_name(name, version): if version == "active": json_string = urlopen(_SEARCH_NAME.format(name + "/status/active/")) else: + # FIXME waiting for new filter mechanism json_string = urlopen(_SEARCH_NAME.format(name)) json_data = json.load(json_string) return json_data['data']['dataset'][0] @@ -40,15 +40,11 @@ def _get_data_description_by_id(data_id): return json_data['data_set_description'] -def _download_data(data_id): - response = urlopen(_DATA_DOWNLOAD.format(data_id)) - # we need to catch IncompleteRead which is likely a server-side issue - try: - data_arff = response.read() - except IncompleteRead as e: - data_arff = e.partial - # getting structured array and metadata - return loadarff(StringIO(data_arff.decode("utf-8"))) +def _download_data(url): + response = urlopen(url) + arff = loadarff(StringIO(response.read().decode('utf-8'))) + response.close() + return arff def fetch_openml(name_or_id=None, version='active', data_home=None, @@ -103,7 +99,7 @@ def mem(func): # check if dataset id is known if isinstance(name_or_id, numbers.Integral): - if version != 1: + if version != "active": raise ValueError( "Dataset id={} and version={} passed, but you can only " "specify a numeric id or a version, not both.".format( @@ -123,17 +119,20 @@ def mem(func): warn("Version {} of dataset {} is inactive, meaning that issues have" " been found in the dataset. Try using a newer version.".format( data_description['name'], data_description['version'])) - target_name = data_description['default_target_attribute'] + target_name = data_description.get('default_target_attribute', None) # download actual data - data, meta = _download_data_(data_id) + data, meta = _download_data_(data_description['url']) columns = np.array(meta.names()) data_columns = columns[columns != target_name] # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous # we could use a view instead. X = np.column_stack(data[c] for c in data_columns) - y = data[target_name] + if target_name is not None: + y = data[target_name] + else: + y = None description = "{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) From bca12e9dd77d8c7451a9a7b431b853f1e6571615 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 14:25:14 +0200 Subject: [PATCH 008/138] allow specifying the target column, starting on docs --- doc/datasets/openml.rst | 68 ++++++++++++++++++++++++++++++++++++++ sklearn/datasets/openml.py | 19 +++++++---- 2 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 doc/datasets/openml.rst diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst new file mode 100644 index 0000000000000..f91226b454b72 --- /dev/null +++ b/doc/datasets/openml.rst @@ -0,0 +1,68 @@ +.. + For doctests: + + >>> import numpy as np + >>> import os + >>> import tempfile + >>> # Create a temporary folder for the data fetcher + >>> custom_data_home = tempfile.mkdtemp() + >>> os.makedirs(os.path.join(custom_data_home, 'mldata')) + + +.. _mldata: + +Downloading datasets from the openml.org repository +=================================================== + +`openml.org `_ is a public repository for machine learning +data and experiments. + +The ``sklearn.datasets`` package is able to directly download data +sets from the repository using the function +:func:`sklearn.datasets.fetch_openml`. + +For example, to download a dataset of gene expressions in mice brains: + + >>> from sklearn.datasets import fetch_mldata + >>> mnist = fetch_mldata('miceprotein', data_home=custom_data_home) + +The MNIST database contains a total of 70000 examples of handwritten digits +of size 28x28 pixels, labeled from 0 to 9:: + + >>> mnist.data.shape + (70000, 784) + >>> mnist.target.shape + (70000,) + >>> np.unique(mnist.target) + array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) + +After the first download, the dataset is cached locally in the path +specified by the ``data_home`` keyword argument, which defaults to +``~/scikit_learn_data/``:: + + >>> os.listdir(os.path.join(custom_data_home, 'mldata')) + ['mnist-original.mat'] + +Data sets in `mldata.org `_ do not adhere to a strict +naming or formatting convention. :func:`sklearn.datasets.fetch_mldata` is +able to make sense of the most common cases, but allows to tailor the +defaults to individual datasets: + +* For datasets with multiple columns, :func:`sklearn.datasets.fetch_mldata` + tries to identify the target and data columns and rename them to ``target`` + and ``data``. This is done by looking for arrays named ``label`` and + ``data`` in the dataset, and failing that by choosing the first array to be + ``target`` and the second to be ``data``. This behavior can be changed with + the ``target_name`` and ``data_name`` keywords, setting them to a specific + name or index number (the name and order of the columns in the datasets + can be found at its `mldata.org `_ under the tab "Data":: + + >>> iris2 = fetch_mldata('datasets-UCI iris', target_name=1, data_name=0, + ... data_home=custom_data_home) + >>> iris3 = fetch_mldata('datasets-UCI iris', target_name='class', + ... data_name='double0', data_home=custom_data_home) + + +.. + >>> import shutil + >>> shutil.rmtree(custom_data_home) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index c1fc2f7af9b60..bc57e6b2feadc 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -48,7 +48,7 @@ def _download_data(url): def fetch_openml(name_or_id=None, version='active', data_home=None, - memory=True): + target_column='default-target', memory=True): """Fetch dataset from openml by name or dataset id. Datasets are uniquely identified by either an integer ID or by a @@ -66,10 +66,16 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, Version of the dataset. Only used if ``name_or_id`` is a string. If 'active' the oldest version that's still active is used. - data_home : optional, default: None + data_home : string or None, default None Specify another download and cache folder for the data sets. By default all scikit-learn data is stored in '~/scikit_learn_data' subfolders. + target_column : string or None, default 'default-target' + Specify the column name in the data to use as target. If + 'default-target', the standard target column a stored on the server + is used. If ``None``, all columns are returned as data and the + tharget is ``None``. + memory : boolean, default=True Whether to store downloaded datasets using joblib. @@ -119,18 +125,19 @@ def mem(func): warn("Version {} of dataset {} is inactive, meaning that issues have" " been found in the dataset. Try using a newer version.".format( data_description['name'], data_description['version'])) - target_name = data_description.get('default_target_attribute', None) + if target_column == "default-target": + target_column = data_description.get('default_target_attribute', None) # download actual data data, meta = _download_data_(data_description['url']) columns = np.array(meta.names()) - data_columns = columns[columns != target_name] + data_columns = columns[columns != target_column] # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous # we could use a view instead. X = np.column_stack(data[c] for c in data_columns) - if target_name is not None: - y = data[target_name] + if target_column is not None: + y = data[target_column] else: y = None From f59ce8b47dc429af6dd57f25520c06ad2bbe209b Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 15:42:05 +0200 Subject: [PATCH 009/138] add openml to the narrative docs --- doc/datasets/index.rst | 3 ++ doc/datasets/openml.rst | 79 +++++++++++++++++++++++++++----------- sklearn/datasets/openml.py | 3 +- 3 files changed, 60 insertions(+), 25 deletions(-) diff --git a/doc/datasets/index.rst b/doc/datasets/index.rst index f91163fc235c5..580d9e3950561 100644 --- a/doc/datasets/index.rst +++ b/doc/datasets/index.rst @@ -318,6 +318,7 @@ writing data in that format. olivetti_faces twenty_newsgroups mldata + openml labeled_faces covtype rcv1 @@ -327,6 +328,8 @@ writing data in that format. .. include:: twenty_newsgroups.rst +.. include:: openml.rst + .. include:: mldata.rst .. include:: labeled_faces.rst diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index f91226b454b72..84669cedf694b 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -21,47 +21,80 @@ The ``sklearn.datasets`` package is able to directly download data sets from the repository using the function :func:`sklearn.datasets.fetch_openml`. -For example, to download a dataset of gene expressions in mice brains: +For example, to download a dataset of gene expressions in mice brains:: >>> from sklearn.datasets import fetch_mldata - >>> mnist = fetch_mldata('miceprotein', data_home=custom_data_home) + >>> mice = fetch_mldata('miceprotein', data_home=custom_data_home) -The MNIST database contains a total of 70000 examples of handwritten digits +The dataset contains a total of 70000 examples of handwritten digits of size 28x28 pixels, labeled from 0 to 9:: - >>> mnist.data.shape + >>> mice.data.shape (70000, 784) - >>> mnist.target.shape + >>> mice.target.shape (70000,) - >>> np.unique(mnist.target) + >>> np.unique(mice.target) array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) -After the first download, the dataset is cached locally in the path -specified by the ``data_home`` keyword argument, which defaults to -``~/scikit_learn_data/``:: +You can get more information on the dataset by looking at the ``DESCR`` +and ``details`` attributes:: - >>> os.listdir(os.path.join(custom_data_home, 'mldata')) - ['mnist-original.mat'] + >>> print(mice.DESCR) + something + >>> mice.details + +The ``DESCR`` contains a free-text description of the data, while ``details`` +contains a dictionary of meta-data stored by openml, like the dataset id. +The id of the mice protein dataset is 4550, and you can use this (or the name) +to get more information on the dataset on the openml website: https://www.openml.org/d/4550. Data sets in `mldata.org `_ do not adhere to a strict naming or formatting convention. :func:`sklearn.datasets.fetch_mldata` is able to make sense of the most common cases, but allows to tailor the defaults to individual datasets: -* For datasets with multiple columns, :func:`sklearn.datasets.fetch_mldata` - tries to identify the target and data columns and rename them to ``target`` - and ``data``. This is done by looking for arrays named ``label`` and - ``data`` in the dataset, and failing that by choosing the first array to be - ``target`` and the second to be ``data``. This behavior can be changed with - the ``target_name`` and ``data_name`` keywords, setting them to a specific - name or index number (the name and order of the columns in the datasets - can be found at its `mldata.org `_ under the tab "Data":: +The id is also the best way to specify how to fetch a dataset from OpenML:: + + >>> mice = fetch_mldata(4550, data_home=custom_data_home) + >>> mice.details + +Dataset Versions +---------------- + +A dataset is uniquely specified by its id, but not necessarily by its name. +Several different "versions" of a dataset with the same name can exist. +If a particular version of a dataset has been found to contain significant +issues, it might be inactivated. Using a name to specify a dataset will yield +the earliest version of a dataset that is still active. That means that +``fetch_mldata("miceprotein")`` can yield different results at differnt times +if earlier versions become inactive. +You can see that the dataset with id 4550 that we fetched above is the version 1 +of the "miceprotein" dataset:: + + >>> mice.details['version'] + 1 + +In fact, this dataset only has one version. The iris dataset on the other hand +has multiple versions:: + + >>> iris = fetch_mldata("iris", data_home=custom_data_home) + >>> iris.details['version'] + >>> iris.details['id'] + + >>> iris_61 = fetch_mldata(61, data_home=custom_data_home) + >>> iris_61.details['version'] + >>> iris_61.details['id'] + + >>> iris_969 = fetch_mldata(969, data_home=custom_data_home) + >>> iris_969.details['version'] + >>> iris_969.details['id'] - >>> iris2 = fetch_mldata('datasets-UCI iris', target_name=1, data_name=0, - ... data_home=custom_data_home) - >>> iris3 = fetch_mldata('datasets-UCI iris', target_name='class', - ... data_name='double0', data_home=custom_data_home) +Specifying the dataset by the name "iris" yields the lowest version, version 1, with the id 61. +To make sure you always get this exact dataset, it is safest to specify it by the dataset id. +The other dataset, with id 969, is version 3 (version 2 has become inactive), and contains +a binarized version of the data:: + >>> np.bincount(iris_969.target) .. >>> import shutil diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index bc57e6b2feadc..01037e25f8693 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -53,8 +53,7 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, Datasets are uniquely identified by either an integer ID or by a combination of name and version (i.e. there might be multiple - versions of the 'iris' dataset). Newer versions are assumed to fix - issues in earlier versions. + versions of the 'iris' dataset). Parameters ---------- From d7dee6dc0bb5a5af106bbb2b373ae7fa1846fc9d Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 15:43:05 +0200 Subject: [PATCH 010/138] get more people to upload stuff to openml. --- doc/datasets/openml.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 84669cedf694b..40c0e81afd9c6 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -15,7 +15,7 @@ Downloading datasets from the openml.org repository =================================================== `openml.org `_ is a public repository for machine learning -data and experiments. +data and experiments, that allows everybody to upload open datasets. The ``sklearn.datasets`` package is able to directly download data sets from the repository using the function From 4c19ad9a300f19f33927e1ade6fe981457720743 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 15:48:56 +0200 Subject: [PATCH 011/138] store metadata, convert to dtype object if there is nominal data. --- sklearn/datasets/openml.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 01037e25f8693..4bb51e05c5759 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -134,7 +134,8 @@ def mem(func): # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous # we could use a view instead. - X = np.column_stack(data[c] for c in data_columns) + dtype = object if "nominal" in meta.types() else None + X = np.array([data[c] for c in data_columns], dtype=dtype).T if target_column is not None: y = data[target_column] else: @@ -145,6 +146,6 @@ def mem(func): bunch = Bunch( data=X, target=y, feature_names=data_columns, - DESCR=description, details=data_description) + DESCR=description, details=data_description, meta=meta) return bunch From 16b7fed08477d165715ef2a40830912cdd38bddd Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 12 Oct 2017 16:05:36 +0200 Subject: [PATCH 012/138] fix doctests, add fetch_openml to __init__ --- doc/datasets/mldata.rst | 1 + doc/datasets/openml.rst | 80 +++++++++++++++++++++++++----------- doc/modules/classes.rst | 1 + sklearn/datasets/__init__.py | 2 + 4 files changed, 59 insertions(+), 25 deletions(-) diff --git a/doc/datasets/mldata.rst b/doc/datasets/mldata.rst index b94dfd7620a24..cb076e1e75bb7 100644 --- a/doc/datasets/mldata.rst +++ b/doc/datasets/mldata.rst @@ -16,6 +16,7 @@ Downloading datasets from the mldata.org repository `mldata.org `_ is a public repository for machine learning data, supported by the `PASCAL network `_ . +It is no longer actively maintained, and it's suggested to use :ref:openml instead. The ``sklearn.datasets`` package is able to directly download data sets from the repository using the function diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 40c0e81afd9c6..8a080fffc1ed8 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -6,10 +6,10 @@ >>> import tempfile >>> # Create a temporary folder for the data fetcher >>> custom_data_home = tempfile.mkdtemp() - >>> os.makedirs(os.path.join(custom_data_home, 'mldata')) + >>> os.makedirs(os.path.join(custom_data_home, 'openml')) -.. _mldata: +.. _openml: Downloading datasets from the openml.org repository =================================================== @@ -23,40 +23,62 @@ sets from the repository using the function For example, to download a dataset of gene expressions in mice brains:: - >>> from sklearn.datasets import fetch_mldata - >>> mice = fetch_mldata('miceprotein', data_home=custom_data_home) + >>> from sklearn.datasets import fetch_openml + >>> mice = fetch_openml('miceprotein', data_home=custom_data_home) The dataset contains a total of 70000 examples of handwritten digits of size 28x28 pixels, labeled from 0 to 9:: >>> mice.data.shape - (70000, 784) + (1080, 81) >>> mice.target.shape - (70000,) - >>> np.unique(mice.target) - array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) + (1080,) + >>> np.unique(mice.target) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + array([b"'c-CS-m'", b"'c-CS-s'", b"'c-SC-m'", b"'c-SC-s'", b"'t-CS-m'", + b"'t-CS-s'", b"'t-SC-m'", b"'t-SC-s'"], dtype='|S8') You can get more information on the dataset by looking at the ``DESCR`` and ``details`` attributes:: - >>> print(mice.DESCR) - something - >>> mice.details + >>> print(mice.DESCR) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + **Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios + **Source**: [UCI](https://archive.ics.uci.edu/ml/datasets/Mice+Protein+Expression) - 2015 + **Please cite**: Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing + Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down + Syndrome. PLoS ONE 10(6): e0129126... + + >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', + 'creator': ..., + 'upload_date': '2016-02-17T14:32:49', 'licence': 'Public', 'url': + 'https://www.openml.org/data/v1/download/1804243/MiceProtein.ARFF', 'file_id': + '1804243', 'default_target_attribute': 'class', 'citation': 'Higuera C, + Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins + Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): + e0129126. [Web Link] journal.pone.0129126', 'tag': ['OpenML100', 'study_14', + 'study_34'], 'visibility': 'public', 'status': 'active', 'md5_checksum': + '3c479a6885bfa0438971388283a1ce32'} + The ``DESCR`` contains a free-text description of the data, while ``details`` contains a dictionary of meta-data stored by openml, like the dataset id. The id of the mice protein dataset is 4550, and you can use this (or the name) to get more information on the dataset on the openml website: https://www.openml.org/d/4550. -Data sets in `mldata.org `_ do not adhere to a strict -naming or formatting convention. :func:`sklearn.datasets.fetch_mldata` is -able to make sense of the most common cases, but allows to tailor the -defaults to individual datasets: - The id is also the best way to specify how to fetch a dataset from OpenML:: - >>> mice = fetch_mldata(4550, data_home=custom_data_home) - >>> mice.details + >>> mice = fetch_openml(4550, data_home=custom_data_home) + >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', + 'creator': ..., + 'upload_date': '2016-02-17T14:32:49', 'licence': 'Public', 'url': + 'https://www.openml.org/data/v1/download/1804243/MiceProtein.ARFF', 'file_id': + '1804243', 'default_target_attribute': 'class', 'citation': 'Higuera C, + Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins + Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): + e0129126. [Web Link] journal.pone.0129126', 'tag': ['OpenML100', 'study_14', + 'study_34'], 'visibility': 'public', 'status': 'active', 'md5_checksum': + '3c479a6885bfa0438971388283a1ce32'} Dataset Versions ---------------- @@ -66,35 +88,43 @@ Several different "versions" of a dataset with the same name can exist. If a particular version of a dataset has been found to contain significant issues, it might be inactivated. Using a name to specify a dataset will yield the earliest version of a dataset that is still active. That means that -``fetch_mldata("miceprotein")`` can yield different results at differnt times +``fetch_openml("miceprotein")`` can yield different results at differnt times if earlier versions become inactive. You can see that the dataset with id 4550 that we fetched above is the version 1 of the "miceprotein" dataset:: >>> mice.details['version'] - 1 + '1' In fact, this dataset only has one version. The iris dataset on the other hand has multiple versions:: - >>> iris = fetch_mldata("iris", data_home=custom_data_home) + >>> iris = fetch_openml("iris", data_home=custom_data_home) >>> iris.details['version'] + '1' >>> iris.details['id'] + '61' - >>> iris_61 = fetch_mldata(61, data_home=custom_data_home) + >>> iris_61 = fetch_openml(61, data_home=custom_data_home) >>> iris_61.details['version'] + '1' >>> iris_61.details['id'] + '61' - >>> iris_969 = fetch_mldata(969, data_home=custom_data_home) + >>> iris_969 = fetch_openml(969, data_home=custom_data_home) >>> iris_969.details['version'] + '3' >>> iris_969.details['id'] + '969' -Specifying the dataset by the name "iris" yields the lowest version, version 1, with the id 61. +'Specifying the dataset by the name "iris" yields the lowest version, version 1, with the id 61. To make sure you always get this exact dataset, it is safest to specify it by the dataset id. The other dataset, with id 969, is version 3 (version 2 has become inactive), and contains a binarized version of the data:: - >>> np.bincount(iris_969.target) + >>> np.unique(iris_969.target) + array([b'N', b'P'], + dtype='|S1') .. >>> import shutil diff --git a/doc/modules/classes.rst b/doc/modules/classes.rst index cfe2fd11c9ac4..b6cbb05a01f55 100644 --- a/doc/modules/classes.rst +++ b/doc/modules/classes.rst @@ -224,6 +224,7 @@ Loaders datasets.fetch_lfw_people datasets.fetch_mldata datasets.fetch_olivetti_faces + datasets.fetch_openml datasets.fetch_rcv1 datasets.fetch_species_distributions datasets.get_data_home diff --git a/sklearn/datasets/__init__.py b/sklearn/datasets/__init__.py index c43c0c4758b10..c7d78e633493d 100644 --- a/sklearn/datasets/__init__.py +++ b/sklearn/datasets/__init__.py @@ -23,6 +23,7 @@ from .twenty_newsgroups import fetch_20newsgroups from .twenty_newsgroups import fetch_20newsgroups_vectorized from .mldata import fetch_mldata, mldata_filename +from .openml import fetch_openml from .samples_generator import make_classification from .samples_generator import make_multilabel_classification from .samples_generator import make_hastie_10_2 @@ -65,6 +66,7 @@ 'fetch_covtype', 'fetch_rcv1', 'fetch_kddcup99', + 'fetch_openml', 'get_data_home', 'load_boston', 'load_diabetes', From b3f6c3690a1fe8c04b5e4fb8f2e00ad432510f85 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Tue, 17 Oct 2017 17:47:54 -0400 Subject: [PATCH 013/138] make arff reading work in python2.7 --- sklearn/datasets/openml.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 4bb51e05c5759..d4ed8163be725 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -1,5 +1,6 @@ import json import numbers +import sys import os from os.path import join, exists from warnings import warn @@ -42,7 +43,12 @@ def _get_data_description_by_id(data_id): def _download_data(url): response = urlopen(url) - arff = loadarff(StringIO(response.read().decode('utf-8'))) + if sys.version_info[0] == 2: + # Python2.7 numpy can't handle unicode? + arff = loadarff(StringIO(response.read())) + else: + arff = loadarff(StringIO(response.read().decode('utf-8'))) + response.close() return arff @@ -141,7 +147,7 @@ def mem(func): else: y = None - description = "{}\n\nDownloaded from openml.org.".format( + description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) bunch = Bunch( From dc401f26b5177300f3ea003c75342baef74ae013 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Tue, 24 Oct 2017 16:41:36 -0400 Subject: [PATCH 014/138] ignore doctests for now because of unicode issues --- doc/datasets/openml.rst | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 8a080fffc1ed8..d82f12fa6e60c 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -33,21 +33,21 @@ of size 28x28 pixels, labeled from 0 to 9:: (1080, 81) >>> mice.target.shape (1080,) - >>> np.unique(mice.target) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + >>> np.unique(mice.target) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP array([b"'c-CS-m'", b"'c-CS-s'", b"'c-SC-m'", b"'c-SC-s'", b"'t-CS-m'", b"'t-CS-s'", b"'t-SC-m'", b"'t-SC-s'"], dtype='|S8') You can get more information on the dataset by looking at the ``DESCR`` and ``details`` attributes:: - >>> print(mice.DESCR) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + >>> print(mice.DESCR) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP **Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios **Source**: [UCI](https://archive.ics.uci.edu/ml/datasets/Mice+Protein+Expression) - 2015 **Please cite**: Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): e0129126... - >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', 'creator': ..., 'upload_date': '2016-02-17T14:32:49', 'licence': 'Public', 'url': @@ -68,7 +68,7 @@ to get more information on the dataset on the openml website: https://www.openml The id is also the best way to specify how to fetch a dataset from OpenML:: >>> mice = fetch_openml(4550, data_home=custom_data_home) - >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', 'creator': ..., 'upload_date': '2016-02-17T14:32:49', 'licence': 'Public', 'url': @@ -93,28 +93,28 @@ if earlier versions become inactive. You can see that the dataset with id 4550 that we fetched above is the version 1 of the "miceprotein" dataset:: - >>> mice.details['version'] + >>> mice.details['version'] #doctest: +SKIP '1' In fact, this dataset only has one version. The iris dataset on the other hand has multiple versions:: >>> iris = fetch_openml("iris", data_home=custom_data_home) - >>> iris.details['version'] + >>> iris.details['version'] #doctest: +SKIP '1' - >>> iris.details['id'] + >>> iris.details['id'] #doctest: +SKIP '61' >>> iris_61 = fetch_openml(61, data_home=custom_data_home) - >>> iris_61.details['version'] + >>> iris_61.details['version'] #doctest: +SKIP '1' - >>> iris_61.details['id'] + >>> iris_61.details['id'] #doctest: +SKIP '61' >>> iris_969 = fetch_openml(969, data_home=custom_data_home) - >>> iris_969.details['version'] + >>> iris_969.details['version'] #doctest: +SKIP '3' - >>> iris_969.details['id'] + >>> iris_969.details['id'] #doctest: +SKIP '969' 'Specifying the dataset by the name "iris" yields the lowest version, version 1, with the id 61. @@ -122,7 +122,7 @@ To make sure you always get this exact dataset, it is safest to specify it by th The other dataset, with id 969, is version 3 (version 2 has become inactive), and contains a binarized version of the data:: - >>> np.unique(iris_969.target) + >>> np.unique(iris_969.target) #doctest: +SKIP array([b'N', b'P'], dtype='|S1') From d8cfd379e3870343bcb227788f5a23c316929c9a Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Tue, 24 Oct 2017 16:51:43 -0400 Subject: [PATCH 015/138] add version filter. --- doc/datasets/openml.rst | 10 +++++++++- sklearn/datasets/openml.py | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index d82f12fa6e60c..b36a933b13406 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -117,7 +117,7 @@ has multiple versions:: >>> iris_969.details['id'] #doctest: +SKIP '969' -'Specifying the dataset by the name "iris" yields the lowest version, version 1, with the id 61. +Specifying the dataset by the name "iris" yields the lowest version, version 1, with the id 61. To make sure you always get this exact dataset, it is safest to specify it by the dataset id. The other dataset, with id 969, is version 3 (version 2 has become inactive), and contains a binarized version of the data:: @@ -126,6 +126,14 @@ a binarized version of the data:: array([b'N', b'P'], dtype='|S1') +You can also specify both the name and the version, which also uniquely identifies the dataset:: + >>> iris_version_3 = fetch_openml("iris", version=3, data_home=custom_data_home) + >>> iris_version_3.details['version'] + '3' + >>> iris_version_3.details['id'] + '969' + + .. >>> import shutil >>> shutil.rmtree(custom_data_home) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index d4ed8163be725..f523f7cd5d145 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -29,8 +29,8 @@ def _get_data_info_by_name(name, version): if version == "active": json_string = urlopen(_SEARCH_NAME.format(name + "/status/active/")) else: - # FIXME waiting for new filter mechanism - json_string = urlopen(_SEARCH_NAME.format(name)) + json_string = urlopen(_SEARCH_NAME.format(name) + + "/data_version/{}".format(version)) json_data = json.load(json_string) return json_data['data']['dataset'][0] From 6f6bb576510055c24b2c34cd2ecb5e2705324a44 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Tue, 14 Nov 2017 18:23:45 -0500 Subject: [PATCH 016/138] some typos, addressing joel's comments, working on better errors --- doc/datasets/mldata.rst | 6 +++--- doc/datasets/openml.rst | 12 ++++++++---- sklearn/datasets/openml.py | 27 +++++++++++++++++++++------ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/doc/datasets/mldata.rst b/doc/datasets/mldata.rst index cb076e1e75bb7..60546bfcfd363 100644 --- a/doc/datasets/mldata.rst +++ b/doc/datasets/mldata.rst @@ -16,10 +16,10 @@ Downloading datasets from the mldata.org repository `mldata.org `_ is a public repository for machine learning data, supported by the `PASCAL network `_ . -It is no longer actively maintained, and it's suggested to use :ref:openml instead. +It is no longer actively maintained, and it's suggested to use :ref:`openml` instead. -The ``sklearn.datasets`` package is able to directly download data -sets from the repository using the function +The ``sklearn.datasets`` package is able to directly download datasets +from the repository using the function :func:`sklearn.datasets.fetch_mldata`. For example, to download the MNIST digit recognition database:: diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index b36a933b13406..087fcf2dee4e9 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -24,10 +24,11 @@ sets from the repository using the function For example, to download a dataset of gene expressions in mice brains:: >>> from sklearn.datasets import fetch_openml - >>> mice = fetch_openml('miceprotein', data_home=custom_data_home) + >>> mice = fetch_openml('miceprotein', version=2, data_home=custom_data_home) -The dataset contains a total of 70000 examples of handwritten digits -of size 28x28 pixels, labeled from 0 to 9:: +To fully specify a dataset, you need to provide a name and a version, though the +version is optional, see :ref:`openml_versions`_ below. +The dataset contains a total of 1080 examples belonging to 8 different classes:: >>> mice.data.shape (1080, 81) @@ -80,11 +81,14 @@ The id is also the best way to specify how to fetch a dataset from OpenML:: 'study_34'], 'visibility': 'public', 'status': 'active', 'md5_checksum': '3c479a6885bfa0438971388283a1ce32'} +.. _openml_versions: + Dataset Versions ---------------- A dataset is uniquely specified by its id, but not necessarily by its name. -Several different "versions" of a dataset with the same name can exist. +Several different "versions" of a dataset with the same name can exist which can contain +entirely different datasets. If a particular version of a dataset has been found to contain significant issues, it might be inactivated. Using a name to specify a dataset will yield the earliest version of a dataset that is still active. That means that diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index f523f7cd5d145..d4ef3b3588e9d 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -11,7 +11,7 @@ except ImportError: # Python 3+ from urllib.request import urlopen - # from http.client import IncompleteRead + from scipy.io.arff import loadarff import numpy as np @@ -19,6 +19,7 @@ from .base import get_data_home from ..externals.joblib import Memory from ..externals.six import StringIO +from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch _SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" @@ -26,11 +27,25 @@ def _get_data_info_by_name(name, version): - if version == "active": - json_string = urlopen(_SEARCH_NAME.format(name + "/status/active/")) - else: - json_string = urlopen(_SEARCH_NAME.format(name) - + "/data_version/{}".format(version)) + data_found = True + try: + if version == "active": + json_string = urlopen(_SEARCH_NAME.format(name + + "/status/active/")) + else: + json_string = urlopen(_SEARCH_NAME.format(name) + + "/data_version/{}".format(version)) + except HTTPError as error: + if error.code == 412: + data_found = False + + if not data_found: + # not in except for nicer traceback + if version == "active": + raise ValueError("No active dataset {} found.".format(name)) + raise ValueError("Dataset {} with version {}" + " not found.".format(name, version)) + json_data = json.load(json_string) return json_data['data']['dataset'][0] From b5c72d9c49453b0ba5902f14798aa9da69f822e2 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 15 Nov 2017 15:08:39 -0500 Subject: [PATCH 017/138] nicer error message on non-existing ID --- sklearn/datasets/openml.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index d4ef3b3588e9d..3658a3ddf435d 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -51,7 +51,16 @@ def _get_data_info_by_name(name, version): def _get_data_description_by_id(data_id): - json_string = urlopen(_DATA_INFO.format(data_id)) + data_found = True + try: + json_string = urlopen(_DATA_INFO.format(data_id)) + except HTTPError as error: + if error.code == 412: + data_found = False + if not data_found: + # not in except for nicer traceback + raise ValueError("Dataset with id {} " + "not found.".format(data_id)) json_data = json.load(json_string) return json_data['data_set_description'] From 64483f8ec76e5193dea318565f326c4e849a0c96 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 15 Nov 2017 15:17:11 -0500 Subject: [PATCH 018/138] minor improvements to data wrangling --- sklearn/datasets/openml.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 3658a3ddf435d..9503ea9d29793 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -159,17 +159,20 @@ def mem(func): # download actual data data, meta = _download_data_(data_description['url']) - columns = np.array(meta.names()) - data_columns = columns[columns != target_column] # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous - # we could use a view instead. - dtype = object if "nominal" in meta.types() else None - X = np.array([data[c] for c in data_columns], dtype=dtype).T + # and target at start or end, we could use a view instead. if target_column is not None: y = data[target_column] + data_columns = meta.names().remove(target_column) else: y = None + data_columns = meta.names() + if all([x == "numeric" for x in meta.types()]): + dtype = None + else: + dtype = object + X = np.array([data[c] for c in data_columns], dtype=dtype).T description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) From 26aaff2c0a58d4efe5b163c47866763045f848dc Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 15 Nov 2017 15:39:14 -0500 Subject: [PATCH 019/138] allow downloading inactive datasets if specified by name and version --- doc/datasets/openml.rst | 10 +++++++--- sklearn/datasets/openml.py | 22 +++++++++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 087fcf2dee4e9..3738b720bc5c0 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -17,8 +17,8 @@ Downloading datasets from the openml.org repository `openml.org `_ is a public repository for machine learning data and experiments, that allows everybody to upload open datasets. -The ``sklearn.datasets`` package is able to directly download data -sets from the repository using the function +The ``sklearn.datasets`` package is able to directly download datasets +from the repository using the function :func:`sklearn.datasets.fetch_openml`. For example, to download a dataset of gene expressions in mice brains:: @@ -64,7 +64,11 @@ and ``details`` attributes:: The ``DESCR`` contains a free-text description of the data, while ``details`` contains a dictionary of meta-data stored by openml, like the dataset id. The id of the mice protein dataset is 4550, and you can use this (or the name) -to get more information on the dataset on the openml website: https://www.openml.org/d/4550. +to get more information on the dataset on the openml website:: + + >>> print(mice.url) + + https://www.openml.org/d/4550 The id is also the best way to specify how to fetch a dataset from OpenML:: diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 9503ea9d29793..1ee4d12fb8836 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -38,6 +38,21 @@ def _get_data_info_by_name(name, version): except HTTPError as error: if error.code == 412: data_found = False + else: + raise error + + if not data_found and version != "active": + # might have been deactivated. will warn later + data_found = True + try: + json_string = urlopen(_SEARCH_NAME.format(name) + + "/data_version/{}/status/deactivated".format( + version)) + except HTTPError as error: + if error.code == 412: + data_found = False + else: + raise error if not data_found: # not in except for nicer traceback @@ -162,12 +177,12 @@ def mem(func): # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous # and target at start or end, we could use a view instead. + data_columns = meta.names() if target_column is not None: y = data[target_column] - data_columns = meta.names().remove(target_column) + data_columns.remove(target_column) else: y = None - data_columns = meta.names() if all([x == "numeric" for x in meta.types()]): dtype = None else: @@ -179,6 +194,7 @@ def mem(func): bunch = Bunch( data=X, target=y, feature_names=data_columns, - DESCR=description, details=data_description, meta=meta) + DESCR=description, details=data_description, meta=meta, + url="https://www.openml.org/d/{}".format(data_id)) return bunch From b3b927637c5cf7d37f454b5bc4eb536976aa00fd Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 15 Nov 2017 15:43:07 -0500 Subject: [PATCH 020/138] update mice version 4 dataset id --- doc/datasets/openml.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 3738b720bc5c0..60fc090cdecfc 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -24,7 +24,7 @@ from the repository using the function For example, to download a dataset of gene expressions in mice brains:: >>> from sklearn.datasets import fetch_openml - >>> mice = fetch_openml('miceprotein', version=2, data_home=custom_data_home) + >>> mice = fetch_openml('miceprotein', version=4, data_home=custom_data_home) To fully specify a dataset, you need to provide a name and a version, though the version is optional, see :ref:`openml_versions`_ below. @@ -63,16 +63,15 @@ and ``details`` attributes:: The ``DESCR`` contains a free-text description of the data, while ``details`` contains a dictionary of meta-data stored by openml, like the dataset id. -The id of the mice protein dataset is 4550, and you can use this (or the name) +The id of the mice protein dataset is 40966, and you can use this (or the name) to get more information on the dataset on the openml website:: >>> print(mice.url) - - https://www.openml.org/d/4550 + https://www.openml.org/d/40966 The id is also the best way to specify how to fetch a dataset from OpenML:: - >>> mice = fetch_openml(4550, data_home=custom_data_home) + >>> mice = fetch_openml(40966, data_home=custom_data_home) >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', 'creator': ..., @@ -96,9 +95,9 @@ entirely different datasets. If a particular version of a dataset has been found to contain significant issues, it might be inactivated. Using a name to specify a dataset will yield the earliest version of a dataset that is still active. That means that -``fetch_openml("miceprotein")`` can yield different results at differnt times +``fetch_openml("miceprotein")`` can yield different results at different times if earlier versions become inactive. -You can see that the dataset with id 4550 that we fetched above is the version 1 +You can see that the dataset with id 40966 that we fetched above is the version 1 of the "miceprotein" dataset:: >>> mice.details['version'] #doctest: +SKIP From 7e91c7140b4d1542a5f0eb946cc32778dd65b3a3 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 15 Nov 2017 15:48:11 -0500 Subject: [PATCH 021/138] add whatsnew entry --- doc/whats_new/v0.20.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/whats_new/v0.20.rst b/doc/whats_new/v0.20.rst index 58506cf8aa99b..5de8cf36e8066 100644 --- a/doc/whats_new/v0.20.rst +++ b/doc/whats_new/v0.20.rst @@ -51,6 +51,12 @@ Model evaluation ``'balanced_accuracy'`` scorer for binary classification. :issue:`8066` by :user:`xyguo` and :user:`Aman Dalmia `. +Datasets + +- Added :func:`dataset.fetch_openml` to fetch any dataset from `OpenML `. + OpenML is a free, open data sharing platform and will replace mldata, which + is no longer maintained. :issue:`9908` by `Andreas Müller`_ + Enhancements ............ From 11909d54fbba7d873154ea301c48dcb9941c0a5c Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 15 Nov 2017 16:29:51 -0500 Subject: [PATCH 022/138] add unicode and normalize whitespace flags to pytest config --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index 02b3015e87f2e..3b82e8eaf996c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -28,6 +28,7 @@ ignore-files=^setup\.py$ addopts = --doctest-modules --disable-pytest-warnings +doctest_optionflags = NORMALIZE_WHITESPACE ALLOW_UNICODE [wheelhouse_uploader] artifact_indexes= From 7e1620328536638c4130e5f6132c155834e6cd11 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 22 Nov 2017 12:00:32 -0500 Subject: [PATCH 023/138] add test for fetch_openml --- sklearn/datasets/tests/test_openml.py | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 sklearn/datasets/tests/test_openml.py diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py new file mode 100644 index 0000000000000..b8f912c4c91e4 --- /dev/null +++ b/sklearn/datasets/tests/test_openml.py @@ -0,0 +1,30 @@ +"""Test the openml loader. + +Skipped on travis. +""" + +from sklearn.datasets import fetch_openml +from sklearn.utils.testing import check_skip_travis, assert_warns, assert_raises + + +def test_fetch_openml(): + # check_skip_travis() + # fetch with version + iris_1 = fetch_openml("iris", version=1) + assert iris_1.details['id'] == '61' + # fetch without version + iris_1 = fetch_openml("iris") + assert iris_1.details['id'] == '61' + # fetch with dataset id + iris_by_id = fetch_openml(61) + assert iris_by_id.details['name'] == "iris" + assert iris_by_id.data.shape == (150, 4) + assert iris_by_id.target.shape == (150,) + # fetch inactive dataset by id + glas2 = assert_warns(UserWarning, fetch_openml, 40675) + # fetch inactive dataset by name and version + assert glas2.data.shape == (163, 9) + glas2_by_version = assert_warns(UserWarning, fetch_openml, 'glass2', 1) + # there is no active version of glass2 + assert glas2_by_version.details['id'] == '40675' + assert_raises(ValueError, fetch_openml, 'glass2') From 8dcb26bb16a0af4eb4685ba8803c5324d6601747 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 22 Nov 2017 12:28:57 -0500 Subject: [PATCH 024/138] test error messages --- sklearn/datasets/openml.py | 2 +- sklearn/datasets/tests/test_openml.py | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 1ee4d12fb8836..473c03475fe4f 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -168,7 +168,7 @@ def mem(func): if data_description['status'] != "active": warn("Version {} of dataset {} is inactive, meaning that issues have" " been found in the dataset. Try using a newer version.".format( - data_description['name'], data_description['version'])) + data_description['version'], data_description['name'])) if target_column == "default-target": target_column = data_description.get('default_target_attribute', None) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index b8f912c4c91e4..c7b66b6045783 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -4,7 +4,8 @@ """ from sklearn.datasets import fetch_openml -from sklearn.utils.testing import check_skip_travis, assert_warns, assert_raises +from sklearn.utils.testing import (check_skip_travis, assert_warns_message, + assert_raise_message) def test_fetch_openml(): @@ -21,10 +22,15 @@ def test_fetch_openml(): assert iris_by_id.data.shape == (150, 4) assert iris_by_id.target.shape == (150,) # fetch inactive dataset by id - glas2 = assert_warns(UserWarning, fetch_openml, 40675) + glas2 = assert_warns_message( + UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, + 40675) # fetch inactive dataset by name and version assert glas2.data.shape == (163, 9) - glas2_by_version = assert_warns(UserWarning, fetch_openml, 'glass2', 1) + glas2_by_version = assert_warns_message( + UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, + "glass2", 1) # there is no active version of glass2 assert glas2_by_version.details['id'] == '40675' - assert_raises(ValueError, fetch_openml, 'glass2') + assert_raise_message(ValueError, "No active dataset glass2 found", + fetch_openml, 'glass2') From 0d562b62df3402c47ae864a4e04222cb105d5bdf Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 22 Nov 2017 12:35:31 -0500 Subject: [PATCH 025/138] fix command for make test-coverage --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6725a7441f75a..6f2115820308c 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ endif test-coverage: rm -rf coverage .coverage - $(PYTEST) sklearn --show-locals -v --with-cov sklearn + $(PYTEST) sklearn --showlocals -v --cov=sklearn test: test-code test-sphinxext test-doc From e274ad3acfd4272943d460f925ef50fdda115fe8 Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 22 Nov 2017 12:48:12 -0500 Subject: [PATCH 026/138] make flake8 green --- sklearn/datasets/tests/test_openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index c7b66b6045783..671c53a93349c 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -4,7 +4,7 @@ """ from sklearn.datasets import fetch_openml -from sklearn.utils.testing import (check_skip_travis, assert_warns_message, +from sklearn.utils.testing import (assert_warns_message, assert_raise_message) From eb39a01fdbd316633a9e9c972c779e6d617cbaef Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Wed, 22 Nov 2017 15:06:44 -0500 Subject: [PATCH 027/138] py35 compatiility --- sklearn/datasets/openml.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 473c03475fe4f..e610f27256a1f 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -61,7 +61,7 @@ def _get_data_info_by_name(name, version): raise ValueError("Dataset {} with version {}" " not found.".format(name, version)) - json_data = json.load(json_string) + json_data = json.loads(json_string.read().decode("utf-8")) return json_data['data']['dataset'][0] @@ -76,7 +76,7 @@ def _get_data_description_by_id(data_id): # not in except for nicer traceback raise ValueError("Dataset with id {} " "not found.".format(data_id)) - json_data = json.load(json_string) + json_data = json.loads(json_string.read().decode("utf-8")) return json_data['data_set_description'] From 67825e85c3be2fb92da49a697ca4ae89b461737e Mon Sep 17 00:00:00 2001 From: Andreas Mueller Date: Thu, 21 Dec 2017 17:45:41 -0500 Subject: [PATCH 028/138] trying to use CSV interface --- sklearn/datasets/openml.py | 44 ++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index e610f27256a1f..002935518c378 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -24,6 +24,7 @@ _SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" _DATA_INFO = "https://openml.org/api/v1/json/data/{}" +_DATA_FEATURES = "https://openml.org/api/v1/json/data/features/{}" def _get_data_info_by_name(name, version): @@ -80,6 +81,21 @@ def _get_data_description_by_id(data_id): return json_data['data_set_description'] +def _get_data_features(data_id): + data_found = True + try: + json_string = urlopen(_DATA_FEATURES.format(data_id)) + except HTTPError as error: + if error.code == 412: + data_found = False + if not data_found: + # not in except for nicer traceback + raise ValueError("Dataset with id {} " + "not found.".format(data_id)) + json_data = json.loads(json_string.read().decode("utf-8")) + return json_data['data_features']['feature'] + + def _download_data(url): response = urlopen(url) if sys.version_info[0] == 2: @@ -92,6 +108,14 @@ def _download_data(url): return arff +def _download_data_csv(file_id): + response = urlopen("https://openml.org/data/v1/get_csv/{}".format(file_id)) + data = np.genfromtxt(response, names=True, dtype=None, delimiter=',', + missing_values='?') + response.close() + return data + + def fetch_openml(name_or_id=None, version='active', data_home=None, target_column='default-target', memory=True): """Fetch dataset from openml by name or dataset id. @@ -142,7 +166,8 @@ def mem(func): return func _get_data_info_by_name_ = mem(_get_data_info_by_name) _get_data_description_by_id_ = mem(_get_data_description_by_id) - _download_data_ = mem(_download_data) + _get_data_features_ = mem(_get_data_features) + _download_data_csv_ = mem(_download_data_csv) if not exists(data_home): os.makedirs(data_home) @@ -173,17 +198,24 @@ def mem(func): target_column = data_description.get('default_target_attribute', None) # download actual data - data, meta = _download_data_(data_description['url']) + features = _get_data_features_(data_id) # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous # and target at start or end, we could use a view instead. - data_columns = meta.names() + data_columns = [] + for feature in features: + if (feature['name'] != target_column and feature['is_ignore'] == + 'false' and feature['is_row_identifier'] == 'false'): + data_columns.append(feature['name']) + + data = _download_data_csv_(data_description['file_id']) if target_column is not None: y = data[target_column] - data_columns.remove(target_column) else: y = None - if all([x == "numeric" for x in meta.types()]): + + if all([feature['data_type'] == "numeric" for feature in features + if feature['name'] in data_columns]): dtype = None else: dtype = object @@ -194,7 +226,7 @@ def mem(func): bunch = Bunch( data=X, target=y, feature_names=data_columns, - DESCR=description, details=data_description, meta=meta, + DESCR=description, details=data_description, features=features, url="https://www.openml.org/d/{}".format(data_id)) return bunch From f6e6c8efd4e43faa0f7d75142a56cad94ccba6d0 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 2 Jul 2018 10:25:59 -0400 Subject: [PATCH 029/138] packed liac-arff and added appropriate utility functions --- sklearn/datasets/openml.py | 35 +- sklearn/datasets/tests/test_openml.py | 1 + sklearn/externals/_liacarff/LICENSE | 19 + sklearn/externals/_liacarff/arff.py | 1036 +++++++++++++++++++++++++ 4 files changed, 1078 insertions(+), 13 deletions(-) create mode 100644 sklearn/externals/_liacarff/LICENSE create mode 100644 sklearn/externals/_liacarff/arff.py diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 002935518c378..c1d58b1c068b8 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -2,6 +2,7 @@ import numbers import sys import os +import pandas as pd from os.path import join, exists from warnings import warn @@ -13,10 +14,10 @@ from urllib.request import urlopen -from scipy.io.arff import loadarff import numpy as np from .base import get_data_home +from ..externals._liacarff.arff import loads from ..externals.joblib import Memory from ..externals.six import StringIO from ..externals.six.moves.urllib.error import HTTPError @@ -27,6 +28,20 @@ _DATA_FEATURES = "https://openml.org/api/v1/json/data/features/{}" +def _openml_fileid_url(file_id): + return "https://www.openml.org/data/v1/download/{}/".format(file_id) + + +def _liacarff_to_dataframe(liacarff): + expected_keys = {'data', 'attributes', 'description', 'relation'} + if liacarff.keys() != expected_keys: + raise ValueError('liacarff object does not contain correct keys.') + data_ = np.array(liacarff['data']) + arff_dict = {col_name: pd.Series(data_[:, idx], dtype=np.float64 if col_type=='NUMERIC' else object) + for idx, (col_name, col_type) in enumerate(liacarff['attributes'])} + return pd.DataFrame(arff_dict) + + def _get_data_info_by_name(name, version): data_found = True try: @@ -100,22 +115,14 @@ def _download_data(url): response = urlopen(url) if sys.version_info[0] == 2: # Python2.7 numpy can't handle unicode? - arff = loadarff(StringIO(response.read())) + arff = loads(response.read()) else: - arff = loadarff(StringIO(response.read().decode('utf-8'))) + arff = loads(response.read().decode('utf-8')) response.close() return arff -def _download_data_csv(file_id): - response = urlopen("https://openml.org/data/v1/get_csv/{}".format(file_id)) - data = np.genfromtxt(response, names=True, dtype=None, delimiter=',', - missing_values='?') - response.close() - return data - - def fetch_openml(name_or_id=None, version='active', data_home=None, target_column='default-target', memory=True): """Fetch dataset from openml by name or dataset id. @@ -167,7 +174,7 @@ def mem(func): _get_data_info_by_name_ = mem(_get_data_info_by_name) _get_data_description_by_id_ = mem(_get_data_description_by_id) _get_data_features_ = mem(_get_data_features) - _download_data_csv_ = mem(_download_data_csv) + _download_data_ = mem(_download_data) if not exists(data_home): os.makedirs(data_home) @@ -207,8 +214,10 @@ def mem(func): if (feature['name'] != target_column and feature['is_ignore'] == 'false' and feature['is_row_identifier'] == 'false'): data_columns.append(feature['name']) + data_arff_url_ = _openml_fileid_url(data_description['file_id']) - data = _download_data_csv_(data_description['file_id']) + data = _liacarff_to_dataframe(_download_data_(data_arff_url_)) + print(data) if target_column is not None: y = data[target_column] else: diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 671c53a93349c..b471a3972ccce 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -9,6 +9,7 @@ def test_fetch_openml(): + print('openml test running') # check_skip_travis() # fetch with version iris_1 = fetch_openml("iris", version=1) diff --git a/sklearn/externals/_liacarff/LICENSE b/sklearn/externals/_liacarff/LICENSE new file mode 100644 index 0000000000000..880cc7047e030 --- /dev/null +++ b/sklearn/externals/_liacarff/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011 Renato de Pontes Pereira, renato.ppontes at gmail dot com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sklearn/externals/_liacarff/arff.py b/sklearn/externals/_liacarff/arff.py new file mode 100644 index 0000000000000..2446a2da6bcc2 --- /dev/null +++ b/sklearn/externals/_liacarff/arff.py @@ -0,0 +1,1036 @@ +# -*- coding: utf-8 -*- +# ============================================================================= +# Federal University of Rio Grande do Sul (UFRGS) +# Connectionist Artificial Intelligence Laboratory (LIAC) +# Renato de Pontes Pereira - rppereira@inf.ufrgs.br +# ============================================================================= +# Copyright (c) 2011 Renato de Pontes Pereira, renato.ppontes at gmail dot com +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# ============================================================================= + +''' +The liac-arff module implements functions to read and write ARFF files in +Python. It was created in the Connectionist Artificial Intelligence Laboratory +(LIAC), which takes place at the Federal University of Rio Grande do Sul +(UFRGS), in Brazil. + +ARFF (Attribute-Relation File Format) is an file format specially created for +describe datasets which are commonly used for machine learning experiments and +softwares. This file format was created to be used in Weka, the best +representative software for machine learning automated experiments. + +An ARFF file can be divided into two sections: header and data. The Header +describes the metadata of the dataset, including a general description of the +dataset, its name and its attributes. The source below is an example of a +header section in a XOR dataset:: + + % + % XOR Dataset + % + % Created by Renato Pereira + % rppereira@inf.ufrgs.br + % http://inf.ufrgs.br/~rppereira + % + % + @RELATION XOR + + @ATTRIBUTE input1 REAL + @ATTRIBUTE input2 REAL + @ATTRIBUTE y REAL + +The Data section of an ARFF file describes the observations of the dataset, in +the case of XOR dataset:: + + @DATA + 0.0,0.0,0.0 + 0.0,1.0,1.0 + 1.0,0.0,1.0 + 1.0,1.0,0.0 + % + % + % + +Notice that several lines are starting with an ``%`` symbol, denoting a +comment, thus, lines with ``%`` at the beginning will be ignored, except by the +description part at the beginning of the file. The declarations ``@RELATION``, +``@ATTRIBUTE``, and ``@DATA`` are all case insensitive and obligatory. + +For more information and details about the ARFF file description, consult +http://www.cs.waikato.ac.nz/~ml/weka/arff.html + + +ARFF Files in Python +~~~~~~~~~~~~~~~~~~~~ + +This module uses built-ins python objects to represent a deserialized ARFF +file. A dictionary is used as the container of the data and metadata of ARFF, +and have the following keys: + +- **description**: (OPTIONAL) a string with the description of the dataset. +- **relation**: (OBLIGATORY) a string with the name of the dataset. +- **attributes**: (OBLIGATORY) a list of attributes with the following + template:: + + (attribute_name, attribute_type) + + the attribute_name is a string, and attribute_type must be an string + or a list of strings. +- **data**: (OBLIGATORY) a list of data instances. Each data instance must be + a list with values, depending on the attributes. + +The above keys must follow the case which were described, i.e., the keys are +case sensitive. The attribute type ``attribute_type`` must be one of these +strings (they are not case sensitive): ``NUMERIC``, ``INTEGER``, ``REAL`` or +``STRING``. For nominal attributes, the ``atribute_type`` must be a list of +strings. + +In this format, the XOR dataset presented above can be represented as a python +object as:: + + xor_dataset = { + 'description': 'XOR Dataset', + 'relation': 'XOR', + 'attributes': [ + ('input1', 'REAL'), + ('input2', 'REAL'), + ('y', 'REAL'), + ], + 'data': [ + [0.0, 0.0, 0.0], + [0.0, 1.0, 1.0], + [1.0, 0.0, 1.0], + [1.0, 1.0, 0.0] + ] + } + + +Features +~~~~~~~~ + +This module provides several features, including: + +- Read and write ARFF files using python built-in structures, such dictionaries + and lists; +- Supports `scipy.sparse.coo `_ + and lists of dictionaries as used by SVMLight +- Supports the following attribute types: NUMERIC, REAL, INTEGER, STRING, and + NOMINAL; +- Has an interface similar to other built-in modules such as ``json``, or + ``zipfile``; +- Supports read and write the descriptions of files; +- Supports missing values and names with spaces; +- Supports unicode values and names; +- Fully compatible with Python 2.7+ and Python 3.4+; +- Under `MIT License `_ + +''' +__author__ = 'Renato de Pontes Pereira, Matthias Feurer' +__author_email__ = 'renato.ppontes@gmail.com, feurerm@informatik.uni-freiburg.de' +__version__ = '2.2.2' + +import csv +import re +import sys + +# CONSTANTS =================================================================== +_SIMPLE_TYPES = ['NUMERIC', 'REAL', 'INTEGER', 'STRING'] + +_TK_DESCRIPTION = '%' +_TK_COMMENT = '%' +_TK_RELATION = '@RELATION' +_TK_ATTRIBUTE = '@ATTRIBUTE' +_TK_DATA = '@DATA' +_TK_VALUE = '' + +_RE_RELATION = re.compile(r'^([^\{\}%,\s]*|\".*\"|\'.*\')$', re.UNICODE) +_RE_ATTRIBUTE = re.compile(r'^(\".*\"|\'.*\'|[^\{\}%,\s]*)\s+(.+)$', re.UNICODE) +_RE_TYPE_NOMINAL = re.compile(r'^\{\s*((\".*\"|\'.*\'|\S*)\s*,\s*)*(\".*\"|\'.*\'|\S*)\s*\}$', re.UNICODE) +_RE_ESCAPE = re.compile(r'\\\'|\\\"|\\\%|[\\"\'%]') +_RE_QUOTATION_MARKS = re.compile(r''''|"''', re.UNICODE) +_RE_REPLACE_FIRST_QUOTATION_MARK = re.compile(r'^(\'|\")') +_RE_REPLACE_LAST_QUOTATION_MARK = re.compile(r'(\'|\")$') + +_ESCAPE_DCT = { + ',': ',', + ' ': ' ', + "'": "\\'", + '"': '\\"', + '%': '\\%', + '\\': '\\', + '\\\'': '\\\'', + '\\"': '\\"', + '\\%': '\\%', +} + +DENSE = 0 # Constant value representing a dense matrix +COO = 1 # Constant value representing a sparse matrix in coordinate format +LOD = 2 # Constant value representing a sparse matrix in list of + # dictionaries format +_SUPPORTED_DATA_STRUCTURES = [DENSE, COO, LOD] + +# ============================================================================= + +# COMPATIBILITY WITH PYTHON 3 ================================================= +PY3 = sys.version_info[0] == 3 +if PY3: + unicode = str + basestring = str + xrange = range +# COMPABILITY WITH PYTHON 2 =================================================== +# ============================================================================= +PY2 = sys.version_info[0] == 2 +if PY2: + from itertools import izip as zip + +# EXCEPTIONS ================================================================== +class ArffException(Exception): + message = None + + def __init__(self): + self.line = -1 + + def __str__(self): + return self.message%self.line + +class BadRelationFormat(ArffException): + '''Error raised when the relation declaration is in an invalid format.''' + message = 'Bad @RELATION format, at line %d.' + +class BadAttributeFormat(ArffException): + '''Error raised when some attribute declaration is in an invalid format.''' + message = 'Bad @ATTRIBUTE format, at line %d.' + +class BadDataFormat(ArffException): + '''Error raised when some data instance is in an invalid format.''' + message = 'Bad @DATA instance format, at line %d.' + +class BadAttributeType(ArffException): + '''Error raised when some invalid type is provided into the attribute + declaration.''' + message = 'Bad @ATTRIBUTE type, at line %d.' + +class BadNominalValue(ArffException): + '''Error raised when a value in used in some data instance but is not + declared into it respective attribute declaration.''' + + def __init__(self, value): + super(BadNominalValue, self).__init__() + self.message = ('Data value %s not found in nominal declaration, ' % value) + 'at line %d.' + +class BadNumericalValue(ArffException): + '''Error raised when and invalid numerical value is used in some data + instance.''' + message = 'Invalid numerical value, at line %d.' + +class BadLayout(ArffException): + '''Error raised when the layout of the ARFF file has something wrong.''' + message = 'Invalid layout of the ARFF file, at line %d.' + +class BadObject(ArffException): + '''Error raised when the object representing the ARFF file has something + wrong.''' + + def __str__(self): + return 'Invalid object.' + +class BadObject(ArffException): + '''Error raised when the object representing the ARFF file has something + wrong.''' + def __init__(self, msg=''): + self.msg = msg + + def __str__(self): + return '%s'%self.msg +# ============================================================================= + +# INTERNAL ==================================================================== +def encode_string(s): + def replace(match): + return _ESCAPE_DCT[match.group(0)] + return u"'" + _RE_ESCAPE.sub(replace, s) + u"'" + +class Conversor(object): + '''Conversor is a helper used for converting ARFF types to Python types.''' + + def __init__(self, type_, values=None): + '''Contructor.''' + + self.values = values + + if type_ == 'NUMERIC' or type_ == 'REAL': + self._conversor = self._float + elif type_ == 'STRING': + self._conversor = self._string + elif type_ == 'INTEGER': + self._conversor = self._integer + elif type_ == 'NOMINAL': + self._conversor = self._nominal + elif type_ == 'ENCODED_NOMINAL': + self._conversor = self._encoded_nominal + self._encoded_values = {value: i for (i, value) in enumerate(values)} + else: + raise BadAttributeType() + + def _float(self, value): + '''Convert the value to float.''' + try: + return float(value) + except ValueError as e: + raise BadNumericalValue() + + def _integer(self, value): + '''Convert the value to integer.''' + try: + return int(float(value)) + except ValueError as e: + raise BadNumericalValue() + + def _string(self, value): + '''Convert the value to string.''' + return unicode(value) + + def _nominal(self, value): + '''Verify the value of nominal attribute and convert it to string.''' + if value not in self.values: + raise BadNominalValue(value) + + return self._string(value) + + def _encoded_nominal(self, value): + '''Perform label encoding (convert labels to integers) while reading + the .arff file.''' + if value not in self.values: + raise BadNominalValue(value) + + return self._encoded_values[value] + + def __call__(self, value): + '''Convert a ``value`` to a given type. + + This function also verify if the value is an empty string or a missing + value, either cases, it returns None. + ''' + value = value.strip(' ') + + if value == u'?' or value == u'': + return None + + value = re.sub(_RE_REPLACE_FIRST_QUOTATION_MARK, '', value) + value = re.sub(_RE_REPLACE_LAST_QUOTATION_MARK, '', value) + + return self._conversor(value) + +class Data(object): + '''Internal helper class to allow for different matrix types without + making the code a huge collection of if statements.''' + def __init__(self): + self.data = [] + + def decode_data(self, s, conversors): + values = self._get_values(s) + + if values[0][0].strip(" ") == '{': + vdict = dict(map(lambda x: (int(x[0]), x[1]), + [i.strip("{").strip("}").strip(" ").split(' ') for + i in values])) + values = [vdict[i] if i in vdict else unicode(0) for i in + xrange(len(conversors))] + # dense lines are decoded one by one + else: + if len(values) != len(conversors): + raise BadDataFormat() + values = [conversors[i](values[i]) for i in xrange(len(values))] + + self.data.append(values) + + def _get_values(self, s): + '''(INTERNAL) Split a line into a list of values''' + if _RE_QUOTATION_MARKS.search(s): + return _read_csv(s.strip(' ')) + else: + return next(csv.reader([s.strip(' ')])) + + def encode_data(self, data, attributes): + '''(INTERNAL) Encodes a line of data. + + Data instances follow the csv format, i.e, attribute values are + delimited by commas. After converted from csv. + + :param data: a list of values. + :param attributes: a list of attributes. Used to check if data is valid. + :return: a string with the encoded data line. + ''' + for inst in data: + if len(inst) != len(attributes): + raise BadObject('len(inst) = {} != len(attributes) {}'.format( + len(inst), len(attributes), + )) + + new_data = [] + for value in inst: + if value is None or value == u'' or value != value: + s = '?' + else: + s = unicode(value) + for escape_char in _ESCAPE_DCT: + if escape_char in s: + s = encode_string(s) + break + new_data.append(s) + + yield u','.join(new_data) + +class COOData(Data): + def __init__(self): + self.data = ([], [], []) + self._current_num_data_points = 0 + + def decode_data(self, s, conversors): + values = self._get_values(s) + + if not values[0][0].strip(" ") == '{': + raise BadLayout() + elif s.replace(' ', '') == '{}': + self._current_num_data_points += 1 + return + + vdict = dict(map(lambda x: (int(x[0]), x[1]), + [i.strip("{").strip("}").strip(" ").split(' ') + for i in values])) + col = sorted(vdict) + values = [conversors[key](unicode(vdict[key])) + for key in sorted(vdict)] + self.data[0].extend(values) + self.data[1].extend([self._current_num_data_points] * len(values)) + self.data[2].extend(col) + + self._current_num_data_points += 1 + + def encode_data(self, data, attributes): + num_attributes = len(attributes) + new_data = [] + current_row = 0 + + row = data.row + col = data.col + data = data.data + + # Check if the rows are sorted + if not all(row[i] <= row[i + 1] for i in xrange(len(row) - 1)): + raise ValueError("liac-arff can only output COO matrices with " + "sorted rows.") + + for v, col, row in zip(data, col, row): + if row > current_row: + # Add empty rows if necessary + while current_row < row: + yield " ".join([u"{", u','.join(new_data), u"}"]) + new_data = [] + current_row += 1 + + if col >= num_attributes: + raise BadObject() + + if v is None or v == u'' or v != v: + s = '?' + else: + s = unicode(v) + for escape_char in _ESCAPE_DCT: + if escape_char in s: + s = encode_string(s) + break + new_data.append("%d %s" % (col, s)) + + yield " ".join([u"{", u','.join(new_data), u"}"]) + +class LODData(Data): + def __init__(self): + self.data = [] + + def decode_data(self, s, conversors): + values = self._get_values(s) + + if not values[0][0].strip(" ") == '{': + raise BadLayout() + elif s.replace(' ', '') == '{}': + self.data.append({}) + return + + vdict = dict(map(lambda x: (int(x[0]), x[1]), + [i.strip("{").strip("}").strip(" ").split(' ') + for i in values])) + for key in vdict: + vdict[key] = conversors[key](vdict[key]) + self.data.append(vdict) + + def encode_data(self, data, attributes): + num_attributes = len(attributes) + for row in data: + new_data = [] + + if len(row) > 0 and max(row) >= num_attributes: + raise BadObject() + + for col in sorted(row): + v = row[col] + if v is None or v == u'' or v != v: + s = '?' + else: + s = unicode(v) + for escape_char in _ESCAPE_DCT: + if escape_char in s: + s = encode_string(s) + break + new_data.append("%d %s" % (col, s)) + + yield " ".join([u"{", u','.join(new_data), u"}"]) + +def _get_data_object_for_decoding(matrix_type): + if matrix_type == DENSE: + return Data() + elif matrix_type == COO: + return COOData() + elif matrix_type == LOD: + return LODData() + else: + raise ValueError("Matrix type %s not supported." % str(matrix_type)) + +def _get_data_object_for_encoding(matrix): + # Probably a scipy.sparse + if hasattr(matrix, 'format'): + if matrix.format == 'coo': + return COOData() + elif isinstance(matrix[0], dict): + return LODData() + else: + return Data() + +def _read_csv(line): + # TODO document + # TODO add unit tests + # * mixed single quotes and double quotes + # * escaped characters! + # * does it behave like the regular csv reader? + values = [] + quoted = False + i = 0 + token = '' + quote_token = False + comma_expected = False + only_whitespace = True + + while i < len(line): + line_i = line[i] + if line_i == ',' and not quoted: + if quote_token: + values.append(u"%s%s%s" % (quote_token, token, quote_token)) + else: + values.append(token) + token = '' + i += 1 + quote_token = False + only_whitespace = True + comma_expected = False + elif comma_expected: + if line_i in (' ', '\t', '\n', '\r'): + i += 1 + else: + print(line_i, i, line) + raise BadLayout() + # Escape character + elif line_i == '\\': + if len(line) == i+1: + raise BadLayout() + if len(line) > i+2 and line[i+1] == '\\': + # Do not trim the escape character for escaping the escape character + token += line[i: i + 2] + else: + token += line[i+1: i+2] + i += 2 + # Quoting + elif line_i in ("'", '"') and (not quoted or line_i == quoted): + if only_whitespace is False: + raise ValueError( + 'Only whitespace allowed before quoting character at ' + 'index %d in line: %s' % (i, line)) + if quoted is False: + token = '' + quoted = line_i + quote_token = line_i + elif quoted == line_i: + quoted = False + comma_expected = True + else: + raise ValueError( + 'Inconsistent use of single quotes and double quotes for ' + 'line at character %d: %s' % (i, line) + ) + i += 1 + elif quoted: + token += line_i + i += 1 + else: + if line_i not in (' ', '\t', '\n', '\r'): + only_whitespace = False + token += line_i + i += 1 + if quoted: + raise ValueError('Quote not closed for line: %s' % line) + if quote_token: + values.append(u"%s%s%s" % (quote_token, token, quote_token)) + else: + values.append(token) + return values + +# ============================================================================= + +# ADVANCED INTERFACE ========================================================== +class ArffDecoder(object): + '''An ARFF decoder.''' + + def __init__(self): + '''Constructor.''' + self._conversors = [] + self._current_line = 0 + + def _decode_comment(self, s): + '''(INTERNAL) Decodes a comment line. + + Comments are single line strings starting, obligatorily, with the ``%`` + character, and can have any symbol, including whitespaces or special + characters. + + This method must receive a normalized string, i.e., a string without + padding, including the "\r\n" characters. + + :param s: a normalized string. + :return: a string with the decoded comment. + ''' + res = re.sub('^\%( )?', '', s) + return res + + def _decode_relation(self, s): + '''(INTERNAL) Decodes a relation line. + + The relation declaration is a line with the format ``@RELATION + ``, where ``relation-name`` is a string. The string must + start with alphabetic character and must be quoted if the name includes + spaces, otherwise this method will raise a `BadRelationFormat` exception. + + This method must receive a normalized string, i.e., a string without + padding, including the "\r\n" characters. + + :param s: a normalized string. + :return: a string with the decoded relation name. + ''' + _, v = s.split(' ', 1) + v = v.strip() + + if not _RE_RELATION.match(v): + raise BadRelationFormat() + + res = unicode(v.strip('"\'')) + return res + + def _decode_attribute(self, s): + '''(INTERNAL) Decodes an attribute line. + + The attribute is the most complex declaration in an arff file. All + attributes must follow the template:: + + @attribute + + where ``attribute-name`` is a string, quoted if the name contains any + whitespace, and ``datatype`` can be: + + - Numerical attributes as ``NUMERIC``, ``INTEGER`` or ``REAL``. + - Strings as ``STRING``. + - Dates (NOT IMPLEMENTED). + - Nominal attributes with format: + + {, , , ...} + + The nominal names follow the rules for the attribute names, i.e., they + must be quoted if the name contains whitespaces. + + This method must receive a normalized string, i.e., a string without + padding, including the "\r\n" characters. + + :param s: a normalized string. + :return: a tuple (ATTRIBUTE_NAME, TYPE_OR_VALUES). + ''' + _, v = s.split(' ', 1) + v = v.strip() + + # Verify the general structure of declaration + m = _RE_ATTRIBUTE.match(v) + if not m: + raise BadAttributeFormat() + + # Extracts the raw name and type + name, type_ = m.groups() + + # Extracts the final name + name = unicode(name.strip('"\'')) + + # Extracts the final type + if _RE_TYPE_NOMINAL.match(type_): + values = _read_csv(type_.strip('{} ')) + values = [ + unicode( + re.sub(_RE_REPLACE_LAST_QUOTATION_MARK, '', + re.sub(_RE_REPLACE_FIRST_QUOTATION_MARK, '', v_.strip(' ')) + ) + ) + for v_ in values + ] + type_ = values + + else: + # If not nominal, verify the type name + type_ = unicode(type_).upper() + if type_ not in ['NUMERIC', 'REAL', 'INTEGER', 'STRING']: + raise BadAttributeType() + + return (name, type_) + + def _decode(self, s, encode_nominal=False, matrix_type=DENSE): + '''Do the job the ``encode``.''' + + # Make sure this method is idempotent + self._current_line = 0 + + # If string, convert to a list of lines + if isinstance(s, basestring): + s = s.strip('\r\n ').replace('\r\n', '\n').split('\n') + + # Create the return object + obj = { + u'description': u'', + u'relation': u'', + u'attributes': [], + u'data': [] + } + + # Create the data helper object + data = _get_data_object_for_decoding(matrix_type) + + # Read all lines + STATE = _TK_DESCRIPTION + for row in s: + self._current_line += 1 + # Ignore empty lines + row = row.strip(' \r\n') + if not row: continue + + u_row = row.upper() + + # DESCRIPTION ----------------------------------------------------- + if u_row.startswith(_TK_DESCRIPTION) and STATE == _TK_DESCRIPTION: + obj['description'] += self._decode_comment(row) + '\n' + # ----------------------------------------------------------------- + + # RELATION -------------------------------------------------------- + elif u_row.startswith(_TK_RELATION): + if STATE != _TK_DESCRIPTION: + raise BadLayout() + + STATE = _TK_RELATION + obj['relation'] = self._decode_relation(row) + # ----------------------------------------------------------------- + + # ATTRIBUTE ------------------------------------------------------- + elif u_row.startswith(_TK_ATTRIBUTE): + if STATE != _TK_RELATION and STATE != _TK_ATTRIBUTE: + raise BadLayout() + + STATE = _TK_ATTRIBUTE + + attr = self._decode_attribute(row) + obj['attributes'].append(attr) + + if isinstance(attr[1], (list, tuple)): + if encode_nominal: + conversor = Conversor('ENCODED_NOMINAL', attr[1]) + else: + conversor = Conversor('NOMINAL', attr[1]) + else: + conversor = Conversor(attr[1]) + + self._conversors.append(conversor) + # ----------------------------------------------------------------- + + # DATA ------------------------------------------------------------ + elif u_row.startswith(_TK_DATA): + if STATE != _TK_ATTRIBUTE: + raise BadLayout() + + STATE = _TK_DATA + # ----------------------------------------------------------------- + + # COMMENT --------------------------------------------------------- + elif u_row.startswith(_TK_COMMENT): + pass + # ----------------------------------------------------------------- + + # DATA INSTANCES -------------------------------------------------- + elif STATE == _TK_DATA: + data.decode_data(row, self._conversors) + # ----------------------------------------------------------------- + + # UNKNOWN INFORMATION --------------------------------------------- + else: + raise BadLayout() + # ----------------------------------------------------------------- + + # Alter the data object + obj['data'] = data.data + if obj['description'].endswith('\n'): + obj['description'] = obj['description'][:-1] + + return obj + + def decode(self, s, encode_nominal=False, return_type=DENSE): + '''Returns the Python representation of a given ARFF file. + + When a file object is passed as an argument, this method reads lines + iteratively, avoiding to load unnecessary information to the memory. + + :param s: a string or file object with the ARFF file. + :param encode_nominal: boolean, if True perform a label encoding + while reading the .arff file. + :param return_type: determines the data structure used to store the + dataset. Can be one of `arff.DENSE`, `arff.COO` and `arff.LOD`. + Consult the section on `working with sparse data`_ + ''' + + try: + return self._decode(s, encode_nominal=encode_nominal, + matrix_type=return_type) + except ArffException as e: + # print e + e.line = self._current_line + raise e + + +class ArffEncoder(object): + '''An ARFF encoder.''' + + def _encode_comment(self, s=''): + '''(INTERNAL) Encodes a comment line. + + Comments are single line strings starting, obligatorily, with the ``%`` + character, and can have any symbol, including whitespaces or special + characters. + + If ``s`` is None, this method will simply return an empty comment. + + :param s: (OPTIONAL) string. + :return: a string with the encoded comment line. + ''' + if s: + return u'%s %s'%(_TK_COMMENT, s) + else: + return u'%s' % _TK_COMMENT + + def _encode_relation(self, name): + '''(INTERNAL) Decodes a relation line. + + The relation declaration is a line with the format ``@RELATION + ``, where ``relation-name`` is a string. + + :param name: a string. + :return: a string with the encoded relation declaration. + ''' + for char in ' %{},': + if char in name: + name = '"%s"'%name + break + + return u'%s %s'%(_TK_RELATION, name) + + def _encode_attribute(self, name, type_): + '''(INTERNAL) Encodes an attribute line. + + The attribute follow the template:: + + @attribute + + where ``attribute-name`` is a string, and ``datatype`` can be: + + - Numerical attributes as ``NUMERIC``, ``INTEGER`` or ``REAL``. + - Strings as ``STRING``. + - Dates (NOT IMPLEMENTED). + - Nominal attributes with format: + + {, , , ...} + + This method must receive a the name of the attribute and its type, if + the attribute type is nominal, ``type`` must be a list of values. + + :param name: a string. + :param type_: a string or a list of string. + :return: a string with the encoded attribute declaration. + ''' + for char in ' %{},': + if char in name: + name = '"%s"'%name + break + + if isinstance(type_, (tuple, list)): + type_tmp = [] + for i in range(len(type_)): + type_i = type_[i] + for escape_char in _ESCAPE_DCT: + if escape_char in type_[i]: + type_i = encode_string(type_[i]) + break + type_tmp.append(u'%s' % type_i) + type_ = u'{%s}'%(u', '.join(type_tmp)) + + return u'%s %s %s'%(_TK_ATTRIBUTE, name, type_) + + def encode(self, obj): + '''Encodes a given object to an ARFF file. + + :param obj: the object containing the ARFF information. + :return: the ARFF file as an unicode string. + ''' + data = [row for row in self.iter_encode(obj)] + + return u'\n'.join(data) + + def iter_encode(self, obj): + '''The iterative version of `arff.ArffEncoder.encode`. + + This encodes iteratively a given object and return, one-by-one, the + lines of the ARFF file. + + :param obj: the object containing the ARFF information. + :return: (yields) the ARFF file as unicode strings. + ''' + # DESCRIPTION + if obj.get('description', None): + for row in obj['description'].split('\n'): + yield self._encode_comment(row) + + # RELATION + if not obj.get('relation'): + raise BadObject('Relation name not found or with invalid value.') + + yield self._encode_relation(obj['relation']) + yield u'' + + # ATTRIBUTES + if not obj.get('attributes'): + raise BadObject('Attributes not found.') + + for attr in obj['attributes']: + # Verify for bad object format + if not isinstance(attr, (tuple, list)) or \ + len(attr) != 2 or \ + not isinstance(attr[0], basestring): + raise BadObject('Invalid attribute declaration "%s"'%str(attr)) + + if isinstance(attr[1], basestring): + # Verify for invalid types + if attr[1] not in _SIMPLE_TYPES: + raise BadObject('Invalid attribute type "%s"'%str(attr)) + + # Verify for bad object format + elif not isinstance(attr[1], (tuple, list)): + raise BadObject('Invalid attribute type "%s"'%str(attr)) + + yield self._encode_attribute(attr[0], attr[1]) + yield u'' + attributes = obj['attributes'] + + # DATA + yield _TK_DATA + if 'data' in obj: + data = _get_data_object_for_encoding(obj.get('data')) + for line in data.encode_data(obj.get('data'), attributes): + yield line + + yield u'' + +# ============================================================================= + +# BASIC INTERFACE ============================================================= +def load(fp, encode_nominal=False, return_type=DENSE): + '''Load a file-like object containing the ARFF document and convert it into + a Python object. + + :param fp: a file-like object. + :param encode_nominal: boolean, if True perform a label encoding + while reading the .arff file. + :param return_type: determines the data structure used to store the + dataset. Can be one of `arff.DENSE`, `arff.COO` and `arff.LOD`. + Consult the section on `working with sparse data`_ + :return: a dictionary. + ''' + decoder = ArffDecoder() + return decoder.decode(fp, encode_nominal=encode_nominal, + return_type=return_type) + +def loads(s, encode_nominal=False, return_type=DENSE): + '''Convert a string instance containing the ARFF document into a Python + object. + + :param s: a string object. + :param encode_nominal: boolean, if True perform a label encoding + while reading the .arff file. + :param return_type: determines the data structure used to store the + dataset. Can be one of `arff.DENSE`, `arff.COO` and `arff.LOD`. + Consult the section on `working with sparse data`_ + :return: a dictionary. + ''' + decoder = ArffDecoder() + return decoder.decode(s, encode_nominal=encode_nominal, + return_type=return_type) + +def dump(obj, fp): + '''Serialize an object representing the ARFF document to a given file-like + object. + + :param obj: a dictionary. + :param fp: a file-like object. + ''' + encoder = ArffEncoder() + generator = encoder.iter_encode(obj) + + last_row = next(generator) + for row in generator: + fp.write(last_row + u'\n') + last_row = row + fp.write(last_row) + + return fp + +def dumps(obj): + '''Serialize an object representing the ARFF document, returning a string. + + :param obj: a dictionary. + :return: a string with the ARFF document. + ''' + encoder = ArffEncoder() + return encoder.encode(obj) +# ============================================================================= From 64724d1a2165ad04d1ac30f67191be3c1ab12e12 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 3 Jul 2018 17:26:13 -0400 Subject: [PATCH 030/138] extended unit tests --- sklearn/datasets/openml.py | 4 +- sklearn/datasets/tests/test_openml.py | 70 ++++++++++++++++++++++----- 2 files changed, 59 insertions(+), 15 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index c1d58b1c068b8..ddf5cad1a6387 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -33,11 +33,12 @@ def _openml_fileid_url(file_id): def _liacarff_to_dataframe(liacarff): + num_keys = {'numeric', 'real'} expected_keys = {'data', 'attributes', 'description', 'relation'} if liacarff.keys() != expected_keys: raise ValueError('liacarff object does not contain correct keys.') data_ = np.array(liacarff['data']) - arff_dict = {col_name: pd.Series(data_[:, idx], dtype=np.float64 if col_type=='NUMERIC' else object) + arff_dict = {col_name: pd.Series(data_[:, idx], dtype=np.float64 if str(col_type).lower() in num_keys else object) for idx, (col_name, col_type) in enumerate(liacarff['attributes'])} return pd.DataFrame(arff_dict) @@ -217,7 +218,6 @@ def mem(func): data_arff_url_ = _openml_fileid_url(data_description['file_id']) data = _liacarff_to_dataframe(_download_data_(data_arff_url_)) - print(data) if target_column is not None: y = data[target_column] else: diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index b471a3972ccce..cb90ba208464c 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -1,27 +1,71 @@ """Test the openml loader. - -Skipped on travis. """ +import numpy as np from sklearn.datasets import fetch_openml +from sklearn.datasets.openml import _get_data_features from sklearn.utils.testing import (assert_warns_message, assert_raise_message) -def test_fetch_openml(): - print('openml test running') - # check_skip_travis() +def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features): # fetch with version - iris_1 = fetch_openml("iris", version=1) - assert iris_1.details['id'] == '61' + data_by_name_id = fetch_openml(data_name, version=data_version) + assert int(data_by_name_id.details['id']) == data_id + # fetch without version - iris_1 = fetch_openml("iris") - assert iris_1.details['id'] == '61' + data_by_name = fetch_openml(data_name) + assert int(data_by_name.details['id']) == data_id + # fetch with dataset id - iris_by_id = fetch_openml(61) - assert iris_by_id.details['name'] == "iris" - assert iris_by_id.data.shape == (150, 4) - assert iris_by_id.target.shape == (150,) + data_by_id = fetch_openml(data_id) + assert data_by_id.details['name'] == data_name + assert data_by_id.data.shape == (expected_observations, expected_features) + assert data_by_id.target.shape == (expected_observations, ) + + # check numeric features: + feature_name_type = {feature['name']: feature['data_type'] for feature in _get_data_features(data_id)} + for idx, feature_name in enumerate(data_by_id.feature_names): + if feature_name_type[feature_name] == 'numeric': + assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, np.number) + + if 'default_target_attribute' in data_by_id.details: + target = data_by_id.details['default_target_attribute'] + if feature_name_type[target] == 'numeric': + assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, np.number) + + +def test_fetch_openml_iris(): + # classification dataset with numeric only columns + data_id = 61 + data_name = 'iris' + data_version = 1 + expected_observations = 150 + expected_features = 4 + fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features) + + +def test_fetch_openml_anneal(): + # classification dataset with numeric and categorical columns + data_id = 2 + data_name = 'anneal' + data_version = 1 + expected_observations = 898 + expected_features = 38 + fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features) + + +def test_fetch_openml_cpu(): + # regression dataset with numeric and categorical columns + data_id = 561 + data_name = 'cpu' + data_version = 1 + expected_observations = 209 + expected_features = 7 + fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features) + + +def test_fetch_openml_inactive(): # fetch inactive dataset by id glas2 = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, From 4ac219c4c6926dc5351e272cc139433103563fe4 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 3 Jul 2018 17:28:13 -0400 Subject: [PATCH 031/138] added comment --- sklearn/datasets/tests/test_openml.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index cb90ba208464c..7408a76b9bf6f 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -27,6 +27,8 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observa feature_name_type = {feature['name']: feature['data_type'] for feature in _get_data_features(data_id)} for idx, feature_name in enumerate(data_by_id.feature_names): if feature_name_type[feature_name] == 'numeric': + # casting trick according to Jaime at + # stackoverflow.com/questions/19486283/how-do-i-quickly-check-if-all-elements-of-numpy-array-are-floats assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, np.number) if 'default_target_attribute' in data_by_id.details: From 73ff417497893f508362c05620ffaa945244bb83 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 6 Jul 2018 16:44:54 -0400 Subject: [PATCH 032/138] added sparse arff --- sklearn/datasets/openml.py | 1 - sklearn/datasets/tests/test_openml.py | 21 +++++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index ddf5cad1a6387..bb1c14d1d22d5 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -19,7 +19,6 @@ from .base import get_data_home from ..externals._liacarff.arff import loads from ..externals.joblib import Memory -from ..externals.six import StringIO from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 7408a76b9bf6f..ae620019a1187 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -14,8 +14,8 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observa assert int(data_by_name_id.details['id']) == data_id # fetch without version - data_by_name = fetch_openml(data_name) - assert int(data_by_name.details['id']) == data_id + fetch_openml(data_name) + # without specifying the version, there is no guarantee that the data id will be the same # fetch with dataset id data_by_id = fetch_openml(data_id) @@ -67,6 +67,23 @@ def test_fetch_openml_cpu(): fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features) +def test_fetch_openml_sparse(): + # regression dataset with numeric and categorical columns + data_id = 292 + data_name = 'Australian' + data_version = 1 + expected_observations = 690 + expected_features = 14 + assert_warns_message( + UserWarning, + "Version 1 of dataset Australian is inactive,", + fetch_dataset_from_openml, + **{'data_id': data_id, 'data_name': data_name, 'data_version': data_version, + 'expected_observations': expected_observations, + 'expected_features': expected_features} + ) + + def test_fetch_openml_inactive(): # fetch inactive dataset by id glas2 = assert_warns_message( From a18dcff0f8599fad4630fadd0c2123aa6c1cf943 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 6 Jul 2018 17:23:13 -0400 Subject: [PATCH 033/138] added mock files --- sklearn/datasets/tests/mock_openml/61/data_description.txt | 0 sklearn/datasets/tests/mock_openml/61/data_features.txt | 1 + 2 files changed, 1 insertion(+) create mode 100644 sklearn/datasets/tests/mock_openml/61/data_description.txt create mode 100644 sklearn/datasets/tests/mock_openml/61/data_features.txt diff --git a/sklearn/datasets/tests/mock_openml/61/data_description.txt b/sklearn/datasets/tests/mock_openml/61/data_description.txt new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/sklearn/datasets/tests/mock_openml/61/data_features.txt b/sklearn/datasets/tests/mock_openml/61/data_features.txt new file mode 100644 index 0000000000000..eb8c5e1610363 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/61/data_features.txt @@ -0,0 +1 @@ +{"data_features":{"feature":[{"index":"0","name":"sepallength","data_type":"numeric","is_target":"false","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"},{"index":"1","name":"sepalwidth","data_type":"numeric","is_target":"false","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"},{"index":"2","name":"petallength","data_type":"numeric","is_target":"false","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"},{"index":"3","name":"petalwidth","data_type":"numeric","is_target":"false","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"},{"index":"4","name":"class","data_type":"nominal","is_target":"true","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"}]}} \ No newline at end of file From f8ad349017596f413c6f1126c1fa7d0892952319 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 6 Jul 2018 17:23:24 -0400 Subject: [PATCH 034/138] mocked data description and data features --- .../tests/mock_openml/61/data_description.txt | 1 + sklearn/datasets/tests/test_openml.py | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/tests/mock_openml/61/data_description.txt b/sklearn/datasets/tests/mock_openml/61/data_description.txt index e69de29bb2d1d..4ba90be2ff7c5 100644 --- a/sklearn/datasets/tests/mock_openml/61/data_description.txt +++ b/sklearn/datasets/tests/mock_openml/61/data_description.txt @@ -0,0 +1 @@ +{"data_set_description":{"id":"61","name":"iris","version":"1","description":"**Author**: R.A. Fisher \n**Source**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/datasets\/Iris) - 1936 - Donated by Michael Marshall \n**Please cite**: \n\n**Iris Plants Database** \nThis is perhaps the best known database to be found in the pattern recognition literature. Fisher's paper is a classic in the field and is referenced frequently to this day. (See Duda & Hart, for example.) The data set contains 3 classes of 50 instances each, where each class refers to a type of iris plant. One class is linearly separable from the other 2; the latter are NOT linearly separable from each other.\n\nPredicted attribute: class of iris plant. \nThis is an exceedingly simple domain. \n \n### Attribute Information:\n 1. sepal length in cm\n 2. sepal width in cm\n 3. petal length in cm\n 4. petal width in cm\n 5. class: \n -- Iris Setosa\n -- Iris Versicolour\n -- Iris Virginica","format":"ARFF","creator":"R.A. Fisher","collection_date":"1936","upload_date":"2014-04-06T23:23:39","licence":"Public","url":"https:\/\/www.openml.org\/data\/v1\/download\/61\/iris.arff","file_id":"61","default_target_attribute":"class","version_label":"1","tag":["study_1","study_25","study_4","study_41","study_50","study_52","study_7","study_86","study_88","study_89","uci"],"visibility":"public","original_data_url":"https:\/\/archive.ics.uci.edu\/ml\/datasets\/Iris","paper_url":"http:\/\/digital.library.adelaide.edu.au\/dspace\/handle\/2440\/15227","status":"active","md5_checksum":"ad484452702105cbf3d30f8deaba39a9"}} \ No newline at end of file diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index ae620019a1187..1a38ecff68911 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -1,6 +1,8 @@ """Test the openml loader. """ +import json import numpy as np +import unittest.mock from sklearn.datasets import fetch_openml from sklearn.datasets.openml import _get_data_features @@ -35,10 +37,24 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observa target = data_by_id.details['default_target_attribute'] if feature_name_type[target] == 'numeric': assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, np.number) + return data_by_id +def mock_data_description(id): + description = open('mock_openml/%d/data_description.txt' % id, 'r').read() + return json.loads(description)['data_set_description'] + + +def mock_data_features(id): + features = open('mock_openml/%d/data_features.txt' % id, 'r').read() + return json.loads(features)['data_features']['feature'] + + +@unittest.mock.patch('sklearn.datasets.openml._get_data_description_by_id', mock_data_description) +@unittest.mock.patch('sklearn.datasets.openml._get_data_features', mock_data_features) def test_fetch_openml_iris(): # classification dataset with numeric only columns + data_id = 61 data_name = 'iris' data_version = 1 @@ -67,8 +83,8 @@ def test_fetch_openml_cpu(): fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features) -def test_fetch_openml_sparse(): - # regression dataset with numeric and categorical columns +def test_fetch_openml_australian(): + # sparse dataset data_id = 292 data_name = 'Australian' data_version = 1 From 720d4f6a535cd3ea57c0b1d191002ab7ff7161aa Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 9 Jul 2018 15:08:10 -0400 Subject: [PATCH 035/138] changed mocking structure to not depend on unittest.mock (for Python 2 compatibility) --- sklearn/datasets/tests/test_openml.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 1a38ecff68911..3c15c82a9b540 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -2,7 +2,7 @@ """ import json import numpy as np -import unittest.mock +import sklearn from sklearn.datasets import fetch_openml from sklearn.datasets.openml import _get_data_features @@ -50,10 +50,14 @@ def mock_data_features(id): return json.loads(features)['data_features']['feature'] -@unittest.mock.patch('sklearn.datasets.openml._get_data_description_by_id', mock_data_description) -@unittest.mock.patch('sklearn.datasets.openml._get_data_features', mock_data_features) +def _patch_webbased_functions(): + sklearn.datasets.openml._get_data_description_by_id = mock_data_description + sklearn.datasets.openml._get_data_features = mock_data_features + + def test_fetch_openml_iris(): # classification dataset with numeric only columns + _patch_webbased_functions() data_id = 61 data_name = 'iris' From 8a4732b16a14b1fc8d7cddebcae10d3de3cb566e Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 12 Jul 2018 16:44:22 -0400 Subject: [PATCH 036/138] removed panda dependency --- sklearn/datasets/openml.py | 43 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index bb1c14d1d22d5..1563de8ee9478 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -2,7 +2,6 @@ import numbers import sys import os -import pandas as pd from os.path import join, exists from warnings import warn @@ -31,17 +30,6 @@ def _openml_fileid_url(file_id): return "https://www.openml.org/data/v1/download/{}/".format(file_id) -def _liacarff_to_dataframe(liacarff): - num_keys = {'numeric', 'real'} - expected_keys = {'data', 'attributes', 'description', 'relation'} - if liacarff.keys() != expected_keys: - raise ValueError('liacarff object does not contain correct keys.') - data_ = np.array(liacarff['data']) - arff_dict = {col_name: pd.Series(data_[:, idx], dtype=np.float64 if str(col_type).lower() in num_keys else object) - for idx, (col_name, col_type) in enumerate(liacarff['attributes'])} - return pd.DataFrame(arff_dict) - - def _get_data_info_by_name(name, version): data_found = True try: @@ -123,8 +111,16 @@ def _download_data(url): return arff +def _convert_numericals(data, name_feature): + for feature in name_feature.values(): + if feature['data_type'] == "numeric": + idx = int(feature['index']) + data[:, idx] = data[:, idx].astype(np.float) + return data + + def fetch_openml(name_or_id=None, version='active', data_home=None, - target_column='default-target', memory=True): + target_column_name='default-target', memory=True): """Fetch dataset from openml by name or dataset id. Datasets are uniquely identified by either an integer ID or by a @@ -145,7 +141,7 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, Specify another download and cache folder for the data sets. By default all scikit-learn data is stored in '~/scikit_learn_data' subfolders. - target_column : string or None, default 'default-target' + target_column_name : string or None, default 'default-target' Specify the column name in the data to use as target. If 'default-target', the standard target column a stored on the server is used. If ``None``, all columns are returned as data and the @@ -201,24 +197,28 @@ def mem(func): warn("Version {} of dataset {} is inactive, meaning that issues have" " been found in the dataset. Try using a newer version.".format( data_description['version'], data_description['name'])) - if target_column == "default-target": - target_column = data_description.get('default_target_attribute', None) + if target_column_name == "default-target": + target_column_name = data_description.get('default_target_attribute', None) # download actual data features = _get_data_features_(data_id) + name_feature = {feature['name']: feature for feature in features} + # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous # and target at start or end, we could use a view instead. data_columns = [] for feature in features: - if (feature['name'] != target_column and feature['is_ignore'] == + if (feature['name'] != target_column_name and feature['is_ignore'] == 'false' and feature['is_row_identifier'] == 'false'): data_columns.append(feature['name']) data_arff_url_ = _openml_fileid_url(data_description['file_id']) - data = _liacarff_to_dataframe(_download_data_(data_arff_url_)) - if target_column is not None: - y = data[target_column] + data = np.array(_download_data_(data_arff_url_)['data'], dtype=object) + data = _convert_numericals(data, name_feature) + + if target_column_name is not None: + y = data[:, int(name_feature[target_column_name]['index'])] else: y = None @@ -227,7 +227,8 @@ def mem(func): dtype = None else: dtype = object - X = np.array([data[c] for c in data_columns], dtype=dtype).T + col_slice = [int(name_feature[col_name]['index']) for col_name in data_columns] + X = np.array(data[:, col_slice], dtype=dtype) description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) From 593ed17f094c25197aab4965c5a1c2d9dfe5c2e3 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 14 Jul 2018 15:13:33 -0400 Subject: [PATCH 037/138] small updated incorporating several of the comments on the pr by @rth and @jnothman --- doc/datasets/openml.rst | 3 +- doc/developers/contributing.rst | 1 + doc/whats_new/v0.20.rst | 6 +- setup.cfg | 1 - sklearn/datasets/openml.py | 64 +++-- .../datasets/tests/mock_openml/61/data.arff | 222 ++++++++++++++++++ ..._description.txt => data_description.json} | 0 .../{data_features.txt => data_features.json} | 0 .../datasets/tests/mock_openml/61/iris_1.json | 42 ++++ .../tests/mock_openml/61/iris_active.json | 81 +++++++ sklearn/datasets/tests/test_openml.py | 59 +++-- 11 files changed, 439 insertions(+), 40 deletions(-) create mode 100644 sklearn/datasets/tests/mock_openml/61/data.arff rename sklearn/datasets/tests/mock_openml/61/{data_description.txt => data_description.json} (100%) rename sklearn/datasets/tests/mock_openml/61/{data_features.txt => data_features.json} (100%) create mode 100644 sklearn/datasets/tests/mock_openml/61/iris_1.json create mode 100644 sklearn/datasets/tests/mock_openml/61/iris_active.json diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 60fc090cdecfc..eb75dd83f179a 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -69,7 +69,8 @@ to get more information on the dataset on the openml website:: >>> print(mice.url) https://www.openml.org/d/40966 -The id is also the best way to specify how to fetch a dataset from OpenML:: +The id is also the most specific way to specify how to fetch a dataset from +OpenML:: >>> mice = fetch_openml(40966, data_home=custom_data_home) >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP diff --git a/doc/developers/contributing.rst b/doc/developers/contributing.rst index 8012b6eecb2b6..4c9791bc7e681 100644 --- a/doc/developers/contributing.rst +++ b/doc/developers/contributing.rst @@ -79,6 +79,7 @@ link to it from your website, or simply star to say "I use it": * `joblib `__ * `sphinx-gallery `__ * `numpydoc `__ + * `liac-arff ` __ and larger projects: diff --git a/doc/whats_new/v0.20.rst b/doc/whats_new/v0.20.rst index 22fa551453e42..83fb5bdc8dbaa 100644 --- a/doc/whats_new/v0.20.rst +++ b/doc/whats_new/v0.20.rst @@ -99,9 +99,6 @@ Classifiers and regressors - :class:`dummy.DummyRegressor` now has a ``return_std`` option in its ``predict`` method. The returned standard deviations will be zeros. -- Added :class:`multioutput.RegressorChain` for multi-target - regression. :issue:`9257` by :user:`Kumar Ashutosh `. - - Added :class:`naive_bayes.ComplementNB`, which implements the Complement Naive Bayes classifier described in Rennie et al. (2003). :issue:`8190` by :user:`Michael A. Alcorn `. @@ -196,7 +193,8 @@ Datasets - Added :func:`dataset.fetch_openml` to fetch any dataset from `OpenML `. OpenML is a free, open data sharing platform and will replace mldata, which - is no longer maintained. :issue:`9908` by `Andreas Müller`_ + is no longer maintained. :issue:`9908` by `Andreas Müller`_ and :user:`Jan N. van Rijn + `. Enhancements ............ diff --git a/setup.cfg b/setup.cfg index 2fe6dbff968dc..a3ae983153818 100644 --- a/setup.cfg +++ b/setup.cfg @@ -8,7 +8,6 @@ addopts = --doctest-modules --disable-pytest-warnings -rs -doctest_optionflags = NORMALIZE_WHITESPACE ALLOW_UNICODE [wheelhouse_uploader] diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 1563de8ee9478..9846409ff304b 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -31,14 +31,36 @@ def _openml_fileid_url(file_id): def _get_data_info_by_name(name, version): + """ + Utilizes the openml dataset listing api to find a dataset by + name/version + OpenML api fn: + https://www.openml.org/api_docs#!/data/get_data_list_data_name_data_name + + Parameters + ---------- + name : str + name of the dataset + + version : int or str + If version is an integer, the exact name/version will be obtained from + OpenML. If version is a string (value: "active") it will take the first + version from OpenML that is annotated as active. Any other string values + except "active" are treated as integer. + + Returns + ------- + json_data['data']['dataset'][0]: json + json representation of the first dataset object that adhired to the search + criteria + + """ data_found = True try: if version == "active": - json_string = urlopen(_SEARCH_NAME.format(name - + "/status/active/")) + response = urlopen(_SEARCH_NAME.format(name) + "/status/active/") else: - json_string = urlopen(_SEARCH_NAME.format(name) - + "/data_version/{}".format(version)) + response = urlopen((_SEARCH_NAME + "/data_version/{}").format(name, version)) except HTTPError as error: if error.code == 412: data_found = False @@ -49,10 +71,9 @@ def _get_data_info_by_name(name, version): # might have been deactivated. will warn later data_found = True try: - json_string = urlopen(_SEARCH_NAME.format(name) + - "/data_version/{}/status/deactivated".format( - version)) + response = urlopen((_SEARCH_NAME + "/data_version/{}/status/deactivated").format(name, version)) except HTTPError as error: + # 412 is an OpenML specific error code, indicating a generic error (e.g., data not found) if error.code == 412: data_found = False else: @@ -65,14 +86,14 @@ def _get_data_info_by_name(name, version): raise ValueError("Dataset {} with version {}" " not found.".format(name, version)) - json_data = json.loads(json_string.read().decode("utf-8")) + json_data = json.loads(response.read().decode("utf-8")) return json_data['data']['dataset'][0] def _get_data_description_by_id(data_id): data_found = True try: - json_string = urlopen(_DATA_INFO.format(data_id)) + response = urlopen(_DATA_INFO.format(data_id)) except HTTPError as error: if error.code == 412: data_found = False @@ -80,26 +101,32 @@ def _get_data_description_by_id(data_id): # not in except for nicer traceback raise ValueError("Dataset with id {} " "not found.".format(data_id)) - json_data = json.loads(json_string.read().decode("utf-8")) + json_data = json.loads(response.read().decode("utf-8")) + response.close() return json_data['data_set_description'] def _get_data_features(data_id): data_found = True try: - json_string = urlopen(_DATA_FEATURES.format(data_id)) + response = urlopen(_DATA_FEATURES.format(data_id)) except HTTPError as error: + # 412 is an OpenML specific error code, indicating a generic error (e.g., data not found) if error.code == 412: data_found = False + else: + raise error if not data_found: # not in except for nicer traceback raise ValueError("Dataset with id {} " "not found.".format(data_id)) - json_data = json.loads(json_string.read().decode("utf-8")) + json_data = json.loads(response.read().decode("utf-8")) + response.close() return json_data['data_features']['feature'] -def _download_data(url): +def _download_data(file_id): + url = _openml_fileid_url(file_id) response = urlopen(url) if sys.version_info[0] == 2: # Python2.7 numpy can't handle unicode? @@ -120,7 +147,7 @@ def _convert_numericals(data, name_feature): def fetch_openml(name_or_id=None, version='active', data_home=None, - target_column_name='default-target', memory=True): + target_column_name='default-target', cache=True): """Fetch dataset from openml by name or dataset id. Datasets are uniquely identified by either an integer ID or by a @@ -147,8 +174,8 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, is used. If ``None``, all columns are returned as data and the tharget is ``None``. - memory : boolean, default=True - Whether to store downloaded datasets using joblib. + cache : boolean, default=True + Whether to cache downloaded datasets using joblib. Returns ------- @@ -162,7 +189,7 @@ def fetch_openml(name_or_id=None, version='active', data_home=None, """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') - if memory: + if cache: mem = Memory(join(data_home, 'cache'), verbose=0).cache else: def mem(func): @@ -212,9 +239,8 @@ def mem(func): if (feature['name'] != target_column_name and feature['is_ignore'] == 'false' and feature['is_row_identifier'] == 'false'): data_columns.append(feature['name']) - data_arff_url_ = _openml_fileid_url(data_description['file_id']) - data = np.array(_download_data_(data_arff_url_)['data'], dtype=object) + data = np.array(_download_data_(data_description['file_id'])['data'], dtype=object) data = _convert_numericals(data, name_feature) if target_column_name is not None: diff --git a/sklearn/datasets/tests/mock_openml/61/data.arff b/sklearn/datasets/tests/mock_openml/61/data.arff new file mode 100644 index 0000000000000..171ec110f05b0 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/61/data.arff @@ -0,0 +1,222 @@ +% 1. Title: Iris Plants Database +% +% 2. Sources: +% (a) Creator: R.A. Fisher +% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov) +% (c) Date: July, 1988 +% +% 3. Past Usage: +% - Publications: too many to mention!!! Here are a few. +% 1. Fisher,R.A. "The use of multiple measurements in taxonomic problems" +% Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions +% to Mathematical Statistics" (John Wiley, NY, 1950). +% 2. Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis. +% (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218. +% 3. Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System +% Structure and Classification Rule for Recognition in Partially Exposed +% Environments". IEEE Transactions on Pattern Analysis and Machine +% Intelligence, Vol. PAMI-2, No. 1, 67-71. +% -- Results: +% -- very low misclassification rates (0% for the setosa class) +% 4. Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE +% Transactions on Information Theory, May 1972, 431-433. +% -- Results: +% -- very low misclassification rates again +% 5. See also: 1988 MLC Proceedings, 54-64. Cheeseman et al's AUTOCLASS II +% conceptual clustering system finds 3 classes in the data. +% +% 4. Relevant Information: +% --- This is perhaps the best known database to be found in the pattern +% recognition literature. Fisher's paper is a classic in the field +% and is referenced frequently to this day. (See Duda & Hart, for +% example.) The data set contains 3 classes of 50 instances each, +% where each class refers to a type of iris plant. One class is +% linearly separable from the other 2; the latter are NOT linearly +% separable from each other. +% --- Predicted attribute: class of iris plant. +% --- This is an exceedingly simple domain. +% +% 5. Number of Instances: 150 (50 in each of three classes) +% +% 6. Number of Attributes: 4 numeric, predictive attributes and the class +% +% 7. Attribute Information: +% 1. sepal length in cm +% 2. sepal width in cm +% 3. petal length in cm +% 4. petal width in cm +% 5. class: +% -- Iris Setosa +% -- Iris Versicolour +% -- Iris Virginica +% +% 8. Missing Attribute Values: None +% +% Summary Statistics: +% Min Max Mean SD Class Correlation +% sepal length: 4.3 7.9 5.84 0.83 0.7826 +% sepal width: 2.0 4.4 3.05 0.43 -0.4194 +% petal length: 1.0 6.9 3.76 1.76 0.9490 (high!) +% petal width: 0.1 2.5 1.20 0.76 0.9565 (high!) +% +% 9. Class Distribution: 33.3% for each of 3 classes. + +@RELATION iris + +@ATTRIBUTE 'sepallength' REAL +@ATTRIBUTE 'sepalwidth' REAL +@ATTRIBUTE 'petallength' REAL +@ATTRIBUTE 'petalwidth' REAL +@ATTRIBUTE 'class' {Iris-setosa,Iris-versicolor,Iris-virginica} + +@DATA +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3.0,1.4,0.2,Iris-setosa +4.7,3.2,1.3,0.2,Iris-setosa +4.6,3.1,1.5,0.2,Iris-setosa +5.0,3.6,1.4,0.2,Iris-setosa +5.4,3.9,1.7,0.4,Iris-setosa +4.6,3.4,1.4,0.3,Iris-setosa +5.0,3.4,1.5,0.2,Iris-setosa +4.4,2.9,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.4,3.7,1.5,0.2,Iris-setosa +4.8,3.4,1.6,0.2,Iris-setosa +4.8,3.0,1.4,0.1,Iris-setosa +4.3,3.0,1.1,0.1,Iris-setosa +5.8,4.0,1.2,0.2,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +5.7,3.8,1.7,0.3,Iris-setosa +5.1,3.8,1.5,0.3,Iris-setosa +5.4,3.4,1.7,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +4.6,3.6,1.0,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.8,3.4,1.9,0.2,Iris-setosa +5.0,3.0,1.6,0.2,Iris-setosa +5.0,3.4,1.6,0.4,Iris-setosa +5.2,3.5,1.5,0.2,Iris-setosa +5.2,3.4,1.4,0.2,Iris-setosa +4.7,3.2,1.6,0.2,Iris-setosa +4.8,3.1,1.6,0.2,Iris-setosa +5.4,3.4,1.5,0.4,Iris-setosa +5.2,4.1,1.5,0.1,Iris-setosa +5.5,4.2,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.0,3.2,1.2,0.2,Iris-setosa +5.5,3.5,1.3,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +4.4,3.0,1.3,0.2,Iris-setosa +5.1,3.4,1.5,0.2,Iris-setosa +5.0,3.5,1.3,0.3,Iris-setosa +4.5,2.3,1.3,0.3,Iris-setosa +4.4,3.2,1.3,0.2,Iris-setosa +5.0,3.5,1.6,0.6,Iris-setosa +5.1,3.8,1.9,0.4,Iris-setosa +4.8,3.0,1.4,0.3,Iris-setosa +5.1,3.8,1.6,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +5.3,3.7,1.5,0.2,Iris-setosa +5.0,3.3,1.4,0.2,Iris-setosa +7.0,3.2,4.7,1.4,Iris-versicolor +6.4,3.2,4.5,1.5,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +5.5,2.3,4.0,1.3,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +5.7,2.8,4.5,1.3,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +4.9,2.4,3.3,1.0,Iris-versicolor +6.6,2.9,4.6,1.3,Iris-versicolor +5.2,2.7,3.9,1.4,Iris-versicolor +5.0,2.0,3.5,1.0,Iris-versicolor +5.9,3.0,4.2,1.5,Iris-versicolor +6.0,2.2,4.0,1.0,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.6,2.9,3.6,1.3,Iris-versicolor +6.7,3.1,4.4,1.4,Iris-versicolor +5.6,3.0,4.5,1.5,Iris-versicolor +5.8,2.7,4.1,1.0,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +6.1,2.8,4.0,1.3,Iris-versicolor +6.3,2.5,4.9,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +6.4,2.9,4.3,1.3,Iris-versicolor +6.6,3.0,4.4,1.4,Iris-versicolor +6.8,2.8,4.8,1.4,Iris-versicolor +6.7,3.0,5.0,1.7,Iris-versicolor +6.0,2.9,4.5,1.5,Iris-versicolor +5.7,2.6,3.5,1.0,Iris-versicolor +5.5,2.4,3.8,1.1,Iris-versicolor +5.5,2.4,3.7,1.0,Iris-versicolor +5.8,2.7,3.9,1.2,Iris-versicolor +6.0,2.7,5.1,1.6,Iris-versicolor +5.4,3.0,4.5,1.5,Iris-versicolor +6.0,3.4,4.5,1.6,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +6.3,2.3,4.4,1.3,Iris-versicolor +5.6,3.0,4.1,1.3,Iris-versicolor +5.5,2.5,4.0,1.3,Iris-versicolor +5.5,2.6,4.4,1.2,Iris-versicolor +6.1,3.0,4.6,1.4,Iris-versicolor +5.8,2.6,4.0,1.2,Iris-versicolor +5.0,2.3,3.3,1.0,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.7,3.0,4.2,1.2,Iris-versicolor +5.7,2.9,4.2,1.3,Iris-versicolor +6.2,2.9,4.3,1.3,Iris-versicolor +5.1,2.5,3.0,1.1,Iris-versicolor +5.7,2.8,4.1,1.3,Iris-versicolor +6.3,3.3,6.0,2.5,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +7.1,3.0,5.9,2.1,Iris-virginica +6.3,2.9,5.6,1.8,Iris-virginica +6.5,3.0,5.8,2.2,Iris-virginica +7.6,3.0,6.6,2.1,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +7.2,3.6,6.1,2.5,Iris-virginica +6.5,3.2,5.1,2.0,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +6.8,3.0,5.5,2.1,Iris-virginica +5.7,2.5,5.0,2.0,Iris-virginica +5.8,2.8,5.1,2.4,Iris-virginica +6.4,3.2,5.3,2.3,Iris-virginica +6.5,3.0,5.5,1.8,Iris-virginica +7.7,3.8,6.7,2.2,Iris-virginica +7.7,2.6,6.9,2.3,Iris-virginica +6.0,2.2,5.0,1.5,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +5.6,2.8,4.9,2.0,Iris-virginica +7.7,2.8,6.7,2.0,Iris-virginica +6.3,2.7,4.9,1.8,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica +7.2,3.2,6.0,1.8,Iris-virginica +6.2,2.8,4.8,1.8,Iris-virginica +6.1,3.0,4.9,1.8,Iris-virginica +6.4,2.8,5.6,2.1,Iris-virginica +7.2,3.0,5.8,1.6,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +7.9,3.8,6.4,2.0,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +6.3,2.8,5.1,1.5,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +7.7,3.0,6.1,2.3,Iris-virginica +6.3,3.4,5.6,2.4,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +6.0,3.0,4.8,1.8,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.1,5.6,2.4,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.8,3.2,5.9,2.3,Iris-virginica +6.7,3.3,5.7,2.5,Iris-virginica +6.7,3.0,5.2,2.3,Iris-virginica +6.3,2.5,5.0,1.9,Iris-virginica +6.5,3.0,5.2,2.0,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +5.9,3.0,5.1,1.8,Iris-virginica diff --git a/sklearn/datasets/tests/mock_openml/61/data_description.txt b/sklearn/datasets/tests/mock_openml/61/data_description.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/61/data_description.txt rename to sklearn/datasets/tests/mock_openml/61/data_description.json diff --git a/sklearn/datasets/tests/mock_openml/61/data_features.txt b/sklearn/datasets/tests/mock_openml/61/data_features.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/61/data_features.txt rename to sklearn/datasets/tests/mock_openml/61/data_features.json diff --git a/sklearn/datasets/tests/mock_openml/61/iris_1.json b/sklearn/datasets/tests/mock_openml/61/iris_1.json new file mode 100644 index 0000000000000..04d748f948e0c --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/61/iris_1.json @@ -0,0 +1,42 @@ +{"data":{"dataset":[ + {"did":61, + "name":"iris", + "version":1, + "status":"active", + "format":"ARFF", + "file_id": 61, + "quality":[ + {"name":"MajorityClassSize", + "value":"50.0" + } + , {"name":"MaxNominalAttDistinctValues", + "value":"3.0" + } + , {"name":"MinorityClassSize", + "value":"50.0" + } + , {"name":"NumberOfClasses", + "value":"3.0" + } + , {"name":"NumberOfFeatures", + "value":"5.0" + } + , {"name":"NumberOfInstances", + "value":"150.0" + } + , {"name":"NumberOfInstancesWithMissingValues", + "value":"0.0" + } + , {"name":"NumberOfMissingValues", + "value":"0.0" + } + , {"name":"NumberOfNumericFeatures", + "value":"4.0" + } + , {"name":"NumberOfSymbolicFeatures", + "value":"1.0" + } + ] + } + ]} +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/61/iris_active.json b/sklearn/datasets/tests/mock_openml/61/iris_active.json new file mode 100644 index 0000000000000..66baa1e852802 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/61/iris_active.json @@ -0,0 +1,81 @@ +{"data":{"dataset":[ + {"did":61, + "name":"iris", + "version":1, + "status":"active", + "format":"ARFF", + "file_id": 61, + "quality":[ + {"name":"MajorityClassSize", + "value":"50.0" + } + , {"name":"MaxNominalAttDistinctValues", + "value":"3.0" + } + , {"name":"MinorityClassSize", + "value":"50.0" + } + , {"name":"NumberOfClasses", + "value":"3.0" + } + , {"name":"NumberOfFeatures", + "value":"5.0" + } + , {"name":"NumberOfInstances", + "value":"150.0" + } + , {"name":"NumberOfInstancesWithMissingValues", + "value":"0.0" + } + , {"name":"NumberOfMissingValues", + "value":"0.0" + } + , {"name":"NumberOfNumericFeatures", + "value":"4.0" + } + , {"name":"NumberOfSymbolicFeatures", + "value":"1.0" + } + ] + } + , {"did":969, + "name":"iris", + "version":3, + "status":"active", + "format":"ARFF", + "file_id": 53503, + "quality":[ + {"name":"MajorityClassSize", + "value":"100.0" + } + , {"name":"MaxNominalAttDistinctValues", + "value":"-1.0" + } + , {"name":"MinorityClassSize", + "value":"50.0" + } + , {"name":"NumberOfClasses", + "value":"2.0" + } + , {"name":"NumberOfFeatures", + "value":"5.0" + } + , {"name":"NumberOfInstances", + "value":"150.0" + } + , {"name":"NumberOfInstancesWithMissingValues", + "value":"0.0" + } + , {"name":"NumberOfMissingValues", + "value":"0.0" + } + , {"name":"NumberOfNumericFeatures", + "value":"4.0" + } + , {"name":"NumberOfSymbolicFeatures", + "value":"1.0" + } + ] + } + ]} +} diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 3c15c82a9b540..173a77b44a443 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -1,23 +1,27 @@ """Test the openml loader. """ +import arff import json import numpy as np import sklearn +from functools import partial from sklearn.datasets import fetch_openml from sklearn.datasets.openml import _get_data_features from sklearn.utils.testing import (assert_warns_message, assert_raise_message) -def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features): +def fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features): # fetch with version data_by_name_id = fetch_openml(data_name, version=data_version) assert int(data_by_name_id.details['id']) == data_id # fetch without version fetch_openml(data_name) - # without specifying the version, there is no guarantee that the data id will be the same + # without specifying the version, there is no guarantee that the data id + # will be the same # fetch with dataset id data_by_id = fetch_openml(data_id) @@ -26,45 +30,67 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observa assert data_by_id.target.shape == (expected_observations, ) # check numeric features: - feature_name_type = {feature['name']: feature['data_type'] for feature in _get_data_features(data_id)} + feature_name_type = {feature['name']: feature['data_type'] + for feature in _get_data_features(data_id)} for idx, feature_name in enumerate(data_by_id.feature_names): if feature_name_type[feature_name] == 'numeric': # casting trick according to Jaime at - # stackoverflow.com/questions/19486283/how-do-i-quickly-check-if-all-elements-of-numpy-array-are-floats - assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, np.number) + # stackoverflow.com/questions/19486283/ + # how-do-i-quickly-check-if-all-elements-of-numpy-array-are-floats + assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, + np.number) if 'default_target_attribute' in data_by_id.details: target = data_by_id.details['default_target_attribute'] if feature_name_type[target] == 'numeric': - assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, np.number) + assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, + np.number) return data_by_id +def mock_get_data_info_by_name(name_or_id, version, data_id): + data_info = open('mock_openml/%d/%s_%s.json' % (data_id, name_or_id, + version), + 'r').read() + data_info_json = json.loads(data_info) + return data_info_json['data']['dataset'][0] + + def mock_data_description(id): - description = open('mock_openml/%d/data_description.txt' % id, 'r').read() + description = open('mock_openml/%d/data_description.json' % id, 'r').read() return json.loads(description)['data_set_description'] def mock_data_features(id): - features = open('mock_openml/%d/data_features.txt' % id, 'r').read() + features = open('mock_openml/%d/data_features.json' % id, 'r').read() return json.loads(features)['data_features']['feature'] -def _patch_webbased_functions(): +def mock_download_data(_, data_id): + arff_fp = open('mock_openml/%d/data.arff' % data_id, 'r').read() + return arff.load(arff_fp) + + +def _monkey_patch_webbased_functions(data_id): + sklearn.datasets.openml._get_data_description_by_id = mock_data_description sklearn.datasets.openml._get_data_features = mock_data_features + sklearn.datasets.openml._download_data = partial(mock_download_data, + data_id=data_id) + sklearn.datasets.openml._get_data_info_by_name = \ + partial(mock_get_data_info_by_name, data_id=data_id) def test_fetch_openml_iris(): # classification dataset with numeric only columns - _patch_webbased_functions() - data_id = 61 data_name = 'iris' data_version = 1 expected_observations = 150 expected_features = 4 - fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features) + _monkey_patch_webbased_functions(data_id) + fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features) def test_fetch_openml_anneal(): @@ -74,7 +100,8 @@ def test_fetch_openml_anneal(): data_version = 1 expected_observations = 898 expected_features = 38 - fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features) + fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features) def test_fetch_openml_cpu(): @@ -84,7 +111,8 @@ def test_fetch_openml_cpu(): data_version = 1 expected_observations = 209 expected_features = 7 - fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features) + fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features) def test_fetch_openml_australian(): @@ -98,7 +126,8 @@ def test_fetch_openml_australian(): UserWarning, "Version 1 of dataset Australian is inactive,", fetch_dataset_from_openml, - **{'data_id': data_id, 'data_name': data_name, 'data_version': data_version, + **{'data_id': data_id, 'data_name': data_name, + 'data_version': data_version, 'expected_observations': expected_observations, 'expected_features': expected_features} ) From 60ee9a2f0662d58a412a32e2590d2023ba6b617d Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 14 Jul 2018 16:18:11 -0400 Subject: [PATCH 038/138] improved parameterization of fetch openml (split id and name into two arguments) correctly setup monkey patch --- sklearn/datasets/openml.py | 42 ++++++++----- sklearn/datasets/tests/test_openml.py | 91 ++++++++++++++++----------- 2 files changed, 80 insertions(+), 53 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 9846409ff304b..727c182723abe 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -146,17 +146,24 @@ def _convert_numericals(data, name_feature): return data -def fetch_openml(name_or_id=None, version='active', data_home=None, +def fetch_openml(id=None, name=None, version='active', data_home=None, target_column_name='default-target', cache=True): """Fetch dataset from openml by name or dataset id. Datasets are uniquely identified by either an integer ID or by a combination of name and version (i.e. there might be multiple - versions of the 'iris' dataset). + versions of the 'iris' dataset). Please give either name or id + (not both). In case a name is given, a version can also be + provided. Parameters ---------- - name_or_id : string or integer + id : int + OpenML ID of the dataset. The most specific way of retrieving a + dataset. If ID is not given, name (and potential version) are + used to obtain a dataset. + + name : string Identifier of the dataset. If integer, assumed to be the id of the dataset on OpenML, if string, assumed to be the name of the dataset. @@ -202,22 +209,25 @@ def mem(func): if not exists(data_home): os.makedirs(data_home) - # check if dataset id is known - if isinstance(name_or_id, numbers.Integral): - if version != "active": + # check legal function arguments. id XOR (name, version) should be provided + if name is not None: + if id is not None: raise ValueError( - "Dataset id={} and version={} passed, but you can only " - "specify a numeric id or a version, not both.".format( - name_or_id, version)) - data_id = name_or_id - elif isinstance(name_or_id, str): - data_info = _get_data_info_by_name_(name_or_id, version) + "Dataset id={} and name={} passed, but you can only " + "specify a numeric id or a name, not both.".format(id, name)) + data_info = _get_data_info_by_name_(name, version) data_id = data_info['did'] - + elif id is not None: + # from the previous if statement, it is given that name is None + if version is not "active": + raise ValueError( + "Dataset id={} and version={} passed, but you can only " + "specify a numeric id or a version, not both.".format(id, + name)) + data_id = id else: - raise TypeError( - "Invalid name_or_id {}, should be string or integer.".format( - name_or_id)) + raise ValueError( + "Neither name nor id are provided. Please provide name xor id.") data_description = _get_data_description_by_id_(data_id) if data_description['status'] != "active": diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 173a77b44a443..470830d5160fc 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -1,25 +1,23 @@ """Test the openml loader. """ -import arff import json import numpy as np import sklearn -from functools import partial from sklearn.datasets import fetch_openml from sklearn.datasets.openml import _get_data_features from sklearn.utils.testing import (assert_warns_message, assert_raise_message) - +from sklearn.externals._liacarff.arff import load def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features): # fetch with version - data_by_name_id = fetch_openml(data_name, version=data_version) + data_by_name_id = fetch_openml(name=data_name, version=data_version) assert int(data_by_name_id.details['id']) == data_id # fetch without version - fetch_openml(data_name) + fetch_openml(name=data_name) # without specifying the version, there is no guarantee that the data id # will be the same @@ -48,49 +46,52 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, return data_by_id -def mock_get_data_info_by_name(name_or_id, version, data_id): - data_info = open('mock_openml/%d/%s_%s.json' % (data_id, name_or_id, - version), - 'r').read() - data_info_json = json.loads(data_info) - return data_info_json['data']['dataset'][0] - - -def mock_data_description(id): +def _mock_data_description(id): description = open('mock_openml/%d/data_description.json' % id, 'r').read() return json.loads(description)['data_set_description'] -def mock_data_features(id): +def _mock_data_features(id): features = open('mock_openml/%d/data_features.json' % id, 'r').read() return json.loads(features)['data_features']['feature'] -def mock_download_data(_, data_id): - arff_fp = open('mock_openml/%d/data.arff' % data_id, 'r').read() - return arff.load(arff_fp) - - -def _monkey_patch_webbased_functions(data_id): - - sklearn.datasets.openml._get_data_description_by_id = mock_data_description - sklearn.datasets.openml._get_data_features = mock_data_features - sklearn.datasets.openml._download_data = partial(mock_download_data, - data_id=data_id) - sklearn.datasets.openml._get_data_info_by_name = \ - partial(mock_get_data_info_by_name, data_id=data_id) - - -def test_fetch_openml_iris(): +def _monkey_patch_webbased_functions(context, data_id): + def _mock_download_data(_): + arff_fp = open('mock_openml/%d/data.arff' % data_id, 'r').read() + return load(arff_fp) + + def _mock_get_data_info_by_name(name_or_id, version): + data_info = open('mock_openml/%d/%s_%s.json' % (data_id, name_or_id, + version), + 'r').read() + data_info_json = json.loads(data_info) + return data_info_json['data']['dataset'][0] + + context.setattr(sklearn.datasets.openml, + '_get_data_description_by_id', + _mock_data_description) + context.setattr(sklearn.datasets.openml, + '_get_data_features', + _mock_data_features) + context.setattr(sklearn.datasets.openml, '_download_data', + _mock_download_data) + context.setattr(sklearn.datasets.openml, + '_get_data_info_by_name', + _mock_get_data_info_by_name) + + +def test_fetch_openml_iris(monkeypatch): # classification dataset with numeric only columns data_id = 61 data_name = 'iris' data_version = 1 expected_observations = 150 expected_features = 4 - _monkey_patch_webbased_functions(data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, - expected_observations, expected_features) + with monkeypatch.context() as m: + _monkey_patch_webbased_functions(m, data_id) + fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features) def test_fetch_openml_anneal(): @@ -142,8 +143,24 @@ def test_fetch_openml_inactive(): assert glas2.data.shape == (163, 9) glas2_by_version = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, - "glass2", 1) - # there is no active version of glass2 + None, "glass2", 1) assert glas2_by_version.details['id'] == '40675' + + +def test_fetch_nonexiting(): + # there is no active version of glass2 assert_raise_message(ValueError, "No active dataset glass2 found", - fetch_openml, 'glass2') + fetch_openml, None, 'glass2') + +def test_fetch_openml_raises_illegal_argument(): + assert_raise_message(ValueError, "Dataset id=", + fetch_openml, -1, "name") + + assert_raise_message(ValueError, "Dataset id=", + fetch_openml, -1, None, "version") + + assert_raise_message(ValueError, "Dataset id=", + fetch_openml, -1, "name", "version") + + assert_raise_message(ValueError, "Neither name nor id are provided. " + + "Please provide name xor id.", fetch_openml) From fe7cfc931a9570e62cc1512c8fef286bcbba0ffa Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 14 Jul 2018 17:43:14 -0400 Subject: [PATCH 039/138] extended functionality and unit tests for sparse matrices --- sklearn/datasets/openml.py | 29 +++++++++++++++--- sklearn/datasets/tests/test_openml.py | 44 ++++++++++++++++++--------- 2 files changed, 55 insertions(+), 18 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 727c182723abe..a374737b9dd2d 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -1,5 +1,4 @@ import json -import numbers import sys import os from os.path import join, exists @@ -30,6 +29,28 @@ def _openml_fileid_url(file_id): return "https://www.openml.org/data/v1/download/{}/".format(file_id) +def _convert_arff_data(arff_data): + """ + converts the arff object into the appropriate matrix type (now: np.ndarray, + later also: scipy.sparse.csr_matrix) based on the 'data part' (i.e., in the + liac-arff dict, the object from the 'data' key) + + Parameters + ---------- + arff_data : list or dict + as obtained from liac-arff object + + returns : np.ndarray (or later also: scipy.sparse.csr_matrix) + """ + if isinstance(arff_data, list): + X = np.array(arff_data, dtype=object) + # elif: extendable for sparse arff in future () + else: + raise ValueError('Unexpected Data Type obtained from arff ' + + '(This should never happen).') + return X + + def _get_data_info_by_name(name, version): """ Utilizes the openml dataset listing api to find a dataset by @@ -179,7 +200,7 @@ def fetch_openml(id=None, name=None, version='active', data_home=None, Specify the column name in the data to use as target. If 'default-target', the standard target column a stored on the server is used. If ``None``, all columns are returned as data and the - tharget is ``None``. + target is ``None``. cache : boolean, default=True Whether to cache downloaded datasets using joblib. @@ -250,7 +271,7 @@ def mem(func): 'false' and feature['is_row_identifier'] == 'false'): data_columns.append(feature['name']) - data = np.array(_download_data_(data_description['file_id'])['data'], dtype=object) + data = _convert_arff_data(_download_data_(data_description['file_id'])['data']) data = _convert_numericals(data, name_feature) if target_column_name is not None: @@ -264,7 +285,7 @@ def mem(func): else: dtype = object col_slice = [int(name_feature[col_name]['index']) for col_name in data_columns] - X = np.array(data[:, col_slice], dtype=dtype) + X = data[:, col_slice].astype(dtype) description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 470830d5160fc..e837bf27b50bb 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -2,6 +2,7 @@ """ import json import numpy as np +import scipy.sparse import sklearn from sklearn.datasets import fetch_openml @@ -10,8 +11,10 @@ assert_raise_message) from sklearn.externals._liacarff.arff import load + def fetch_dataset_from_openml(data_id, data_name, data_version, - expected_observations, expected_features): + expected_observations, expected_features, + expect_sparse): # fetch with version data_by_name_id = fetch_openml(name=data_name, version=data_version) assert int(data_by_name_id.details['id']) == data_id @@ -26,6 +29,10 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, assert data_by_id.details['name'] == data_name assert data_by_id.data.shape == (expected_observations, expected_features) assert data_by_id.target.shape == (expected_observations, ) + if expect_sparse: + assert isinstance(data_by_id.data, scipy.sparse.csr_matrix) + else: + assert isinstance(data_by_id.data, np.ndarray) # check numeric features: feature_name_type = {feature['name']: feature['data_type'] @@ -46,17 +53,15 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, return data_by_id -def _mock_data_description(id): - description = open('mock_openml/%d/data_description.json' % id, 'r').read() - return json.loads(description)['data_set_description'] - - -def _mock_data_features(id): - features = open('mock_openml/%d/data_features.json' % id, 'r').read() - return json.loads(features)['data_features']['feature'] +def _monkey_patch_webbased_functions(context, data_id): + def _mock_data_description(id): + description = open('mock_openml/%d/data_description.json' % id, 'r').read() + return json.loads(description)['data_set_description'] + def _mock_data_features(id): + features = open('mock_openml/%d/data_features.json' % id, 'r').read() + return json.loads(features)['data_features']['feature'] -def _monkey_patch_webbased_functions(context, data_id): def _mock_download_data(_): arff_fp = open('mock_openml/%d/data.arff' % data_id, 'r').read() return load(arff_fp) @@ -91,7 +96,8 @@ def test_fetch_openml_iris(monkeypatch): with monkeypatch.context() as m: _monkey_patch_webbased_functions(m, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, - expected_observations, expected_features) + expected_observations, expected_features, + expect_sparse=False) def test_fetch_openml_anneal(): @@ -102,7 +108,8 @@ def test_fetch_openml_anneal(): expected_observations = 898 expected_features = 38 fetch_dataset_from_openml(data_id, data_name, data_version, - expected_observations, expected_features) + expected_observations, expected_features, + expect_sparse=False) def test_fetch_openml_cpu(): @@ -113,11 +120,14 @@ def test_fetch_openml_cpu(): expected_observations = 209 expected_features = 7 fetch_dataset_from_openml(data_id, data_name, data_version, - expected_observations, expected_features) + expected_observations, expected_features, + expect_sparse=False) def test_fetch_openml_australian(): # sparse dataset + # Australian is the only sparse dataset that is reasonably small + # as it is inactive, we need to catch the warning data_id = 292 data_name = 'Australian' data_version = 1 @@ -130,7 +140,12 @@ def test_fetch_openml_australian(): **{'data_id': data_id, 'data_name': data_name, 'data_version': data_version, 'expected_observations': expected_observations, - 'expected_features': expected_features} + 'expected_features': expected_features, + 'expect_sparse': False} + # Sadly, due to a bug in liac-arff library, the data + # is always returned as a dense array. + # discussion in OpenML library: + # https://github.com/openml/openml-python/issues/487 ) @@ -152,6 +167,7 @@ def test_fetch_nonexiting(): assert_raise_message(ValueError, "No active dataset glass2 found", fetch_openml, None, 'glass2') + def test_fetch_openml_raises_illegal_argument(): assert_raise_message(ValueError, "Dataset id=", fetch_openml, -1, "name") From be9332b4a1d4a651077dfec73dc9cee4a080ac86 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 14 Jul 2018 18:02:22 -0400 Subject: [PATCH 040/138] added __init__.py for externals/liac-arff (neccessary for Python 2) --- sklearn/externals/_liacarff/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sklearn/externals/_liacarff/__init__.py diff --git a/sklearn/externals/_liacarff/__init__.py b/sklearn/externals/_liacarff/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d From 3a537b339a29d449637a83ab4a50e18cb7925187 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 14 Jul 2018 18:31:03 -0400 Subject: [PATCH 041/138] removed monkeypatch context manager from with block --- sklearn/datasets/tests/test_openml.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index e837bf27b50bb..8e596fa238a11 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -93,11 +93,11 @@ def test_fetch_openml_iris(monkeypatch): data_version = 1 expected_observations = 150 expected_features = 4 - with monkeypatch.context() as m: - _monkey_patch_webbased_functions(m, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, - expected_observations, expected_features, - expect_sparse=False) + + _monkey_patch_webbased_functions(monkeypatch, data_id) + fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features, + expect_sparse=False) def test_fetch_openml_anneal(): From 757552a9ebb7a1d3f508374ec41441b164cdf447 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 14 Jul 2018 18:49:46 -0400 Subject: [PATCH 042/138] adapted test paths --- sklearn/datasets/tests/test_openml.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 8e596fa238a11..4280c3f106b8a 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -2,6 +2,7 @@ """ import json import numpy as np +import os import scipy.sparse import sklearn @@ -54,22 +55,31 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, def _monkey_patch_webbased_functions(context, data_id): + testdir_path = os.path.dirname(os.path.realpath(__file__)) + def _mock_data_description(id): - description = open('mock_openml/%d/data_description.json' % id, 'r').read() + path = os.path.join(testdir_path, + 'mock_openml/%d/data_description.json' % id) + description = open(path, 'r').read() return json.loads(description)['data_set_description'] def _mock_data_features(id): - features = open('mock_openml/%d/data_features.json' % id, 'r').read() + path = os.path.join(testdir_path, + 'mock_openml/%d/data_features.json' % id) + features = open(path, 'r').read() return json.loads(features)['data_features']['feature'] def _mock_download_data(_): - arff_fp = open('mock_openml/%d/data.arff' % data_id, 'r').read() + path = os.path.join(testdir_path, 'mock_openml/%d/data.arff' % data_id) + arff_fp = open(path, 'r').read() return load(arff_fp) def _mock_get_data_info_by_name(name_or_id, version): - data_info = open('mock_openml/%d/%s_%s.json' % (data_id, name_or_id, - version), - 'r').read() + path = os.path.join(testdir_path, + 'mock_openml/%d/%s_%s.json' % (data_id, + name_or_id, + version)) + data_info = open(path, 'r').read() data_info_json = json.loads(data_info) return data_info_json['data']['dataset'][0] From 266e7224517010b85ae480fdc23921f9f7d2faf9 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 14 Jul 2018 19:03:50 -0400 Subject: [PATCH 043/138] monkeypatched anneal test --- .../tests/mock_openml/2/anneal_1.json | 42 + .../tests/mock_openml/2/anneal_active.json | 81 ++ .../datasets/tests/mock_openml/2/data.arff | 1064 +++++++++++++++++ .../tests/mock_openml/2/data_description.json | 19 + .../tests/mock_openml/2/data_features.json | 317 +++++ sklearn/datasets/tests/test_openml.py | 3 +- 6 files changed, 1525 insertions(+), 1 deletion(-) create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1.json create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_active.json create mode 100644 sklearn/datasets/tests/mock_openml/2/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/2/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/2/data_features.json diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1.json b/sklearn/datasets/tests/mock_openml/2/anneal_1.json new file mode 100644 index 0000000000000..d2de270a8a066 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/anneal_1.json @@ -0,0 +1,42 @@ +{"data":{"dataset":[ + {"did":2, + "name":"anneal", + "version":1, + "status":"active", + "format":"ARFF", + "file_id": 1666876, + "quality":[ + {"name":"MajorityClassSize", + "value":"684.0" + } + , {"name":"MaxNominalAttDistinctValues", + "value":"7.0" + } + , {"name":"MinorityClassSize", + "value":"8.0" + } + , {"name":"NumberOfClasses", + "value":"5.0" + } + , {"name":"NumberOfFeatures", + "value":"39.0" + } + , {"name":"NumberOfInstances", + "value":"898.0" + } + , {"name":"NumberOfInstancesWithMissingValues", + "value":"898.0" + } + , {"name":"NumberOfMissingValues", + "value":"22175.0" + } + , {"name":"NumberOfNumericFeatures", + "value":"6.0" + } + , {"name":"NumberOfSymbolicFeatures", + "value":"33.0" + } + ] + } + ]} +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_active.json b/sklearn/datasets/tests/mock_openml/2/anneal_active.json new file mode 100644 index 0000000000000..5800415477eed --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/anneal_active.json @@ -0,0 +1,81 @@ +{ + "data": { + "dataset": [{ + "did": 2, + "name": "anneal", + "version": 1, + "status": "active", + "format": "ARFF", + "file_id": 1666876, + "quality": [{ + "name": "MajorityClassSize", + "value": "684.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "7.0" + }, { + "name": "MinorityClassSize", + "value": "8.0" + }, { + "name": "NumberOfClasses", + "value": "5.0" + }, { + "name": "NumberOfFeatures", + "value": "39.0" + }, { + "name": "NumberOfInstances", + "value": "898.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "898.0" + }, { + "name": "NumberOfMissingValues", + "value": "22175.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "6.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "33.0" + }] + }, { + "did": 989, + "name": "anneal", + "version": 3, + "status": "active", + "format": "ARFF", + "file_id": 53523, + "quality": [{ + "name": "MajorityClassSize", + "value": "684.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "9.0" + }, { + "name": "MinorityClassSize", + "value": "214.0" + }, { + "name": "NumberOfClasses", + "value": "2.0" + }, { + "name": "NumberOfFeatures", + "value": "39.0" + }, { + "name": "NumberOfInstances", + "value": "898.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "898.0" + }, { + "name": "NumberOfMissingValues", + "value": "22175.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "6.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "33.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff b/sklearn/datasets/tests/mock_openml/2/data.arff new file mode 100644 index 0000000000000..401cb5e724ba2 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/data.arff @@ -0,0 +1,1064 @@ +% 1. Title of Database: Annealing Data +% +% 2. Source Information: donated by David Sterling and Wray Buntine. +% +% 3. Past Usage: unknown +% +% 4. Relevant Information: +% -- Explanation: I suspect this was left by Ross Quinlan in 1987 at the +% 4th Machine Learning Workshop. I'd have to check with Jeff Schlimmer +% to double check this. +% +% 5. Number of Instances: 798 +% +% 6. Number of Attributes: 38 +% -- 6 continuously-valued +% -- 3 integer-valued +% -- 29 nominal-valued +% +% 7. Attribute Information: +% 1. family: --,GB,GK,GS,TN,ZA,ZF,ZH,ZM,ZS +% 2. product-type: C, H, G +% 3. steel: -,R,A,U,K,M,S,W,V +% 4. carbon: continuous +% 5. hardness: continuous +% 6. temper_rolling: -,T +% 7. condition: -,S,A,X +% 8. formability: -,1,2,3,4,5 +% 9. strength: continuous +% 10. non-ageing: -,N +% 11. surface-finish: P,M,- +% 12. surface-quality: -,D,E,F,G +% 13. enamelability: -,1,2,3,4,5 +% 14. bc: Y,- +% 15. bf: Y,- +% 16. bt: Y,- +% 17. bw/me: B,M,- +% 18. bl: Y,- +% 19. m: Y,- +% 20. chrom: C,- +% 21. phos: P,- +% 22. cbond: Y,- +% 23. marvi: Y,- +% 24. exptl: Y,- +% 25. ferro: Y,- +% 26. corr: Y,- +% 27. blue/bright/varn/clean: B,R,V,C,- +% 28. lustre: Y,- +% 29. jurofm: Y,- +% 30. s: Y,- +% 31. p: Y,- +% 32. shape: COIL, SHEET +% 33. thick: continuous +% 34. width: continuous +% 35. len: continuous +% 36. oil: -,Y,N +% 37. bore: 0000,0500,0600,0760 +% 38. packing: -,1,2,3 +% classes: 1,2,3,4,5,U +% +% -- The '-' values are actually 'not_applicable' values rather than +% 'missing_values' (and so can be treated as legal discrete +% values rather than as showing the absence of a discrete value). +% +% 8. Missing Attribute Values: Signified with "?" +% Attribute: Number of instances missing its value: +% 1 0 +% 2 0 +% 3 70 +% 4 0 +% 5 0 +% 6 675 +% 7 271 +% 8 283 +% 9 0 +% 10 703 +% 11 790 +% 12 217 +% 13 785 +% 14 797 +% 15 680 +% 16 736 +% 17 609 +% 18 662 +% 19 798 +% 20 775 +% 21 791 +% 22 730 +% 23 798 +% 24 796 +% 25 772 +% 26 798 +% 27 793 +% 28 753 +% 29 798 +% 30 798 +% 31 798 +% 32 0 +% 33 0 +% 34 0 +% 35 0 +% 36 740 +% 37 0 +% 38 789 +% 39 0 +% +% 9. Distribution of Classes +% Class Name: Number of Instances: +% 1 8 +% 2 88 +% 3 608 +% 4 0 +% 5 60 +% U 34 +% --- +% 798 +% +@relation anneal.ORIG +@attribute 'family' { GB , GK , GS , TN , ZA , ZF , ZH , ZM , ZS } +@attribute 'product-type' { C , H , G } +@attribute 'steel' { R , A , U , K , M , S , W , V } +@attribute 'carbon' real +@attribute 'hardness' real +@attribute 'temper_rolling' { T } +@attribute 'condition' { S , A , X } +@attribute 'formability' { 1 , 2 , 3 , 4 , 5 } +@attribute 'strength' real +@attribute 'non-ageing' { N } +@attribute 'surface-finish' { P , M } +@attribute 'surface-quality' { D , E , F , G } +@attribute 'enamelability' { 1 , 2 , 3 , 4 , 5 } +@attribute 'bc' { Y } +@attribute 'bf' { Y } +@attribute 'bt' { Y } +@attribute 'bw%2Fme' { B , M } +@attribute 'bl' { Y } +@attribute 'm' { Y } +@attribute 'chrom' { C } +@attribute 'phos' { P } +@attribute 'cbond' { Y } +@attribute 'marvi' { Y } +@attribute 'exptl' { Y } +@attribute 'ferro' { Y } +@attribute 'corr' { Y } +@attribute 'blue%2Fbright%2Fvarn%2Fclean' { B , R , V , C } +@attribute 'lustre' { Y } +@attribute 'jurofm' { Y } +@attribute 's' { Y } +@attribute 'p' { Y } +@attribute 'shape' { COIL , SHEET } +@attribute 'thick' real +@attribute 'width' real +@attribute 'len' real +@attribute 'oil' { Y , N } +@attribute 'bore' { 0 , 500 , 600 , 760 } +@attribute 'packing' { 1 , 2 , 3 } +@attribute 'class' { 1 , 2 , 3 , 4 , 5 , U } +@data +% +% instances from file: anneal-train.arff +% +?,C,A,8,0,?,S,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,385.1,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,255,269,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.3,152,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,1320,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,4880,Y,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,150,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,761,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,4,1320,762,?,0,?,3 +?,C,A,10,0,?,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.201,600,0,?,0,?,U +?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4170,Y,0,?,U +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320.1,762,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.501,1200.1,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,761,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,610,0,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,50,0,?,0,?,U +?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 +?,C,A,3,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,610,0,?,0,?,1 +?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1320,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.8,356,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4170,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,900,0,?,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,500,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,5 +?,C,?,0,45,?,S,?,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.4,1320,4170,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,450,0,?,0,?,U +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.75,1320,4880,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1220,0,?,0,?,5 +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.399,1320,0,?,0,?,3 +?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.651,20,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,374.9,4880,?,0,?,3 +ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,50,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,Y,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,762,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.799,20,0,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,301,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,610,4880,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,4880,?,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,1274.9,0,?,500,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,N,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,762,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,761,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,762,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,150,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,374.9,4880,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,610,762,Y,0,?,3 +?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,762,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,762,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,4880,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,762,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.301,610,0,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,762,?,0,?,U +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,500,762,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,515,610,Y,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,611,?,0,?,5 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,762,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,20,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,250,0,?,0,?,5 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.801,610,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.5,610,0,?,600,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,762,Y,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,1300,0,?,0,?,3 +?,C,A,4,0,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,1130,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609,612,?,0,?,3 +?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,609.9,4880,?,0,?,2 +?,C,A,0,0,?,S,3,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,1320,0,?,0,?,3 +ZS,C,A,0,70,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2,1250,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,4880,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,762,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,1,?,0,?,2 +?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 +ZS,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,640,0,?,600,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,4880,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,3,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1090,0,?,0,?,2 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,610,0,?,0,?,5 +?,C,A,10,0,?,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,1320,0,?,0,?,U +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320.1,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.5,640,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,609.9,4880,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,761,?,0,?,5 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,4880,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,612,?,0,?,2 +?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,610,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,761,?,0,?,3 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,25,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,SHEET,0.5,1220,4880,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,762,?,0,?,3 +?,C,?,0,0,T,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,761,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 +?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1100,762,?,0,?,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1090,0,?,0,?,2 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,Y,0,?,U +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,520,4880,?,0,?,3 +ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.25,20,0,?,0,?,3 +?,C,S,0,0,?,?,?,400,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,V,?,?,?,?,COIL,0.8,75,0,?,0,?,1 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,4880,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 +?,C,A,4,0,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,1130,0,?,0,?,3 +?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.451,1320,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.6,1220,0,?,0,?,5 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.599,1275,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,5 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.599,610,0,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,4170,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,1220,0,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,762,?,0,?,2 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,1525,0,?,0,?,2 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.1,900,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1525,612,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.5,610,0,?,600,?,3 +?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,5 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,610,4880,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,50,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,760,N,0,?,3 +?,C,R,0,0,?,A,3,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.4,58,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1250,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,830,881,?,0,?,2 +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,1320,0,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2,1525,0,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,520,762,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.8,710.1,0,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 +?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,1000,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,N,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.201,1000,0,?,600,?,U +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,1220,4880,?,0,?,5 +ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,75,0,?,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1220,0,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.7,1320,0,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,610,1000,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,966.1,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,610,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,375,612,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,5 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1320,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,1220,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,50,0,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,4170,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,1250,4880,N,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,1274.9,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,1,?,0,?,2 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,U +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.6,50,0,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,1320,0,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,610,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,762,?,0,?,3 +ZS,C,R,0,0,?,?,?,300,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,COIL,0.8,915.1,0,?,0,?,1 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,1000,0,?,600,?,U +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,640,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,612,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,1320,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,20,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,520,4880,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,3,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,610,762,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,1250,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,762,N,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.901,966.1,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,595,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609.9,4880,?,0,?,3 +?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1000,4880,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,60,0,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,900,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,3,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,2.3,900,0,?,500,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1300,762,?,0,?,2 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,1320,4880,Y,0,?,3 +?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,762,?,0,?,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.3,1090,0,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,520,4880,?,0,?,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.9,610,1220,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,762,?,0,?,3 +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.399,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,761,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,N,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1220,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,610,761,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,400,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,612,?,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.5,609.9,612,?,0,?,5 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.301,1320,0,?,0,?,3 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,640,0,?,500,?,3 +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,762,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.6,249.9,0,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.9,1135,0,?,600,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,762,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.901,966,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,75,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,1250,762,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,609,0,?,0,?,3 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.6,20,0,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,900,0,?,0,?,3 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,762,?,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.5,250,0,?,0,?,5 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,50,0,?,0,?,5 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,1274.9,762,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,255.1,270,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1500,4170,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,20,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.7,1320,0,?,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1220,4880,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1220,762,?,0,?,U +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,610,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,610,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.321,610,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.601,1220,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,150,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1220,762,?,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,250,0,?,0,?,5 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1220,0,Y,0,?,U +?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,762,?,0,?,2 +?,C,S,0,0,?,?,?,400,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,1 +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,4170,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,761,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,4880,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,150,762,?,0,?,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.299,1050,1220,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,4880,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,375,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,1220,0,?,0,?,3 +?,C,S,0,0,?,?,?,400,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,75,0,?,0,?,1 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,610,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,762,?,0,?,3 +?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.8,50,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,762,?,0,?,2 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.5,609.9,3000,?,0,?,5 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,SHEET,1,610,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.601,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.301,610,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,612,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1500,4170,?,0,?,2 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.201,50,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.75,610,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,374.9,762,?,0,?,3 +?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,900,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,150,762,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,2.2,900,0,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,A,4,0,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,25,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,3,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,4880,?,0,?,2 +?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,N,0,?,3 +?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,761,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,?,0,?,3 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,900,0,?,600,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,300.1,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,300.1,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,610,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,762,?,0,?,U +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.601,609.9,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,300,?,0,?,3 +ZS,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1220,0,?,0,3,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1220,4880,?,0,?,U +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1220,761,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,?,0,?,3 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,S,0,0,?,?,?,400,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,75,0,?,0,?,1 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,1320,0,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1250,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,1320,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320.1,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.201,385.1,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,500,4880,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,500,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4170,?,0,?,2 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,5 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1300,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,50,0,?,0,?,3 +?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.5,29,0,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,595,762,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,1200,611,?,0,?,U +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,355,0,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,610,0,?,500,?,U +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609.9,0,?,0,?,3 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,900,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,1000,0,?,600,?,3 +ZS,C,R,0,0,?,?,?,300,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,COIL,0.8,915,0,?,0,?,1 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.201,610,0,?,600,?,U +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,1320,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,5 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.7,610,0,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,0,?,0,?,U +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,500,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.5,609.9,612,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1500,612,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,4880,?,0,?,2 +?,C,A,0,0,?,S,3,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,1320,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.8,900.1,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,385.1,0,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1300,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,375,612,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,?,0,3,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,1220,0,Y,0,?,U +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,610,0,?,0,?,2 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,N,0,?,3 +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,609.9,0,?,0,?,3 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,610,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,612,?,0,?,3 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,900,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1500,612,?,0,?,2 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,20,0,?,0,?,2 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,900,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,1220,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,612,?,0,?,2 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,762,?,0,?,3 +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,4880,?,0,?,2 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,612,?,0,?,2 +?,C,S,0,0,?,?,?,700,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,609.9,0,?,0,?,1 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.9,1050,1220,?,0,?,2 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,75,0,?,0,?,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.3,1090,0,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,20,0,?,0,?,3 +?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,B,?,?,?,?,SHEET,2,609.9,301,?,0,?,2 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,610,0,Y,0,?,U +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.799,249.9,0,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,Y,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,1320,761,?,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,610,0,?,0,?,3 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,900,0,?,0,?,3 +?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,762,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,4880,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.301,20,0,?,0,?,3 +ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,335,612,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,Y,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1220,761,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,900,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,255.1,269,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,600,150,?,0,?,U +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,762,N,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,831.9,881,?,0,?,2 +ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,20,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.321,610,0,?,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1275,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1220,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,595,762,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.2,900,0,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,50,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,3000,?,0,?,2 +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.4,1310,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,610,0,?,600,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,SHEET,0.5,610,762,?,0,?,5 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,2.8,610,0,?,600,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,1300,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1500,612,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,4170,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.201,152,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,1320,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,4880,N,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 +?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,612,Y,0,?,U +?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1525,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,4170,?,0,?,2 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,20,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1300,762,?,0,?,2 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,610,300,?,0,?,5 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,Y,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,610,0,?,600,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.451,20,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1500,4170,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,761,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.201,1320,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,300.1,762,?,0,?,3 +?,C,A,4,0,T,?,?,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,25,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.5,1000,0,?,600,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,4880,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.3,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,609.9,612,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4170,?,0,?,3 +?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,610,0,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,385.1,0,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,1320,0,?,600,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.2,640,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,20,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,614,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,4880,?,0,?,3 +TN,C,A,0,0,?,S,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,609.9,0,?,0,?,5 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,610,0,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.5,900,0,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,762,N,0,?,3 +ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,609.9,0,?,0,?,3 +ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.501,1275,4880,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1220,762,?,0,?,U +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,759,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,3000,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,200.1,4880,?,0,?,U +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,335,3000,?,0,?,5 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1250,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,612,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,610,4880,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,609,0,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,1200,150,?,0,?,U +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,609.9,0,?,0,?,U +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4170,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,4880,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,20,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1300,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,1320,4170,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,610,4880,?,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.6,609.9,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,519.9,762,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,75,0,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,900,0,?,500,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,Y,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.8,356.1,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1300,4880,?,0,?,2 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.201,190,0,?,0,?,U +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.501,600.1,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,610,762,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.2,609.9,0,?,0,?,5 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.799,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,150,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,640,0,?,0,?,3 +?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,762,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,500,4120,Y,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,0,?,3 +?,C,?,0,45,?,S,?,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,4170,?,0,?,2 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1,610,0,?,0,?,3 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,640,0,?,500,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,612,?,0,?,2 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,762,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,600.1,0,?,0,?,5 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,4880,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,610,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1220,612,?,0,?,5 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,N,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,762,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,20,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,1320,0,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1275,762,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,4170,?,0,?,3 +ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,20,0,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,640,0,?,0,?,3 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,600,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.301,610,0,N,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,1,?,0,?,5 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,612,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1250,0,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,610,0,?,0,?,3 +?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,B,?,?,?,?,SHEET,2,300.1,301,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,1.2,599.9,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.8,356.1,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,610,4880,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.4,600,611,?,0,?,U +?,C,R,0,0,?,A,3,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,20,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,762,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,356,762,?,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,610,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609,612,?,0,?,3 +?,C,?,0,0,T,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,?,0,?,3 +?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,300.1,301,?,0,?,2 +?,C,A,0,0,?,S,3,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,1320,0,?,0,?,3 +?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1320,301,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,609.9,0,?,0,?,U +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,519,762,?,0,?,3 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3,65.1,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,4170,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4880,?,0,?,3 +?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,761,?,0,?,2 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,1220,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,762,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,762,N,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.5,1220,4880,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.201,0,0,?,0,?,3 +ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1250,0,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,640,0,?,600,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,5 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,762,?,0,?,3 +TN,C,A,0,0,?,S,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,609.9,0,?,0,?,5 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,20,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,3,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,U +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,761,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,609.9,0,?,0,?,3 +?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.5,28,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4170,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,761,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,150,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,SHEET,3.2,610,762,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,761,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,4,1000,0,?,600,?,U +?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,609.9,762,?,0,?,2 +?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.601,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,Y,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,50,0,?,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,1274.9,762,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,150,762,?,0,?,2 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,4880,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,759,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,830,881,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,60,0,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.801,1320,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.599,610,0,?,0,?,2 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.3,1220,4170,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,150,4880,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,1320,0,?,500,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,N,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.299,1050,1220,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,300.1,4880,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,1220,762,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,761,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,612,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,609.9,762,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,N,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,610,0,?,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1275,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,1320,611,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,1,?,0,?,2 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.8,255,270,?,0,?,3 +?,C,A,8,0,?,S,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,20,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,300,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,N,0,?,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.9,610,3000,?,0,?,2 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,610,0,?,600,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,900,0,?,600,?,3 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1320,4880,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,4170,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,4880,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,374.9,762,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,609.9,0,?,0,?,5 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1250,4880,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,N,0,?,3 +?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.799,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,519.9,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,1250,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1320,0,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,1,20,0,?,0,?,U +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,5 +?,C,M,0,0,?,?,?,600,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1320,4880,?,0,?,2 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,760,N,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,640,0,?,600,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1320,0,?,0,?,3 +?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.201,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,4880,Y,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609.9,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,761,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,2 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,1220,761,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1220,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1525,4170,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,2,3 +?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.3,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,609.9,0,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.3,610,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.801,1320,0,?,600,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,5 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.451,610,762,?,0,?,3 +?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,COIL,0.6,609.9,0,?,0,?,5 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,762,?,0,?,2 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,335,612,?,0,?,5 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,761,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,Y,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,150,?,0,?,3 +?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,1320,0,?,0,?,3 +?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,610,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,2 +?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,609,0,?,0,?,3 +ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,150,762,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,762,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.321,1220,0,?,0,?,U +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1274.9,4880,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,Y,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,606.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,762,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,20,0,?,0,?,2 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1,900,0,?,0,?,3 +?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,B,?,?,?,?,SHEET,2,609.9,4880,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,150,612,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,1220,4880,?,0,?,U +?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,762,?,0,?,3 +?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.201,1320,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1525,612,?,0,?,2 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,150,4880,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,335,1,?,0,?,5 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,1300,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,1220,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.599,609.9,0,?,0,?,2 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,595,4880,?,0,?,3 +?,C,R,0,0,?,A,3,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,75,0,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,150,612,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,150,762,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1220,762,?,0,?,5 +?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,1000,0,?,600,?,3 +?,C,R,0,0,?,A,3,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,1320,0,?,0,?,3 +ZS,C,A,0,70,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 +?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,610,4880,?,0,?,3 +ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,4170,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,609.9,612,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,Y,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,4170,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1220,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,4170,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,5 +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.1,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1500,4170,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,3,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,610,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,4170,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,335,611,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,COIL,0.699,610,0,N,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,374.9,4880,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,4880,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,762,N,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,375,612,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,20,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,1320,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.201,609.9,0,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,900,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,150,762,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,250,0,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,4880,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,966,0,?,0,?,3 +?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.001,50,0,Y,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1300,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,610,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1500,4170,?,0,?,2 +% +% instances from file: anneal-test.arff +% +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,609.9,0,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,762,?,0,?,U +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,5 +?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,B,?,?,?,?,SHEET,1.6,300.1,301,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4170,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,1250,762,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.8,50,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,831.9,881,?,0,?,2 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4170,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,385.1,0,?,0,?,3 +?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,1320,0,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,1320,762,Y,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,150,3000,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,4880,?,0,?,3 +?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,609.9,0,?,0,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,335,3000,?,0,?,5 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.5,335,3000,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,301,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,60,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,1220,762,?,0,?,5 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,1320,0,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,762,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,4880,?,0,?,3 +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,50,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.301,1220,4170,?,0,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,640,0,?,600,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,375,612,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,1320,0,?,0,?,3 +?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,610,762,?,0,?,3 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,Y,0,?,U +?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,600,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.2,900,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,1220,4880,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,610,0,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,Y,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,610,762,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,610,762,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,0,762,?,0,?,3 +?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,4880,N,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,3 +?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,610,762,?,0,?,3 +ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2,1250,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,761,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 +ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4170,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,609,4880,?,0,?,3 +?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.9,1050,1220,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1525,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,609.9,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,599.9,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,609.9,0,?,0,?,2 +?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,375,612,?,0,?,3 +?,C,A,8,0,?,S,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1300,4880,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.1,610,0,?,0,?,3 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,609.9,762,?,0,?,2 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1320,0,?,0,?,3 +ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,U +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,0,?,0,?,3 +?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,4170,Y,0,?,U +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,50,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,762,?,0,?,3 +ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,609.9,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 +?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,3 +?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,610,0,?,600,?,3 +?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.2,640,0,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1220,762,?,0,?,3 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,4880,?,0,?,2 +?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,Y,?,?,?,COIL,0.24,20,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1320,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,375,612,?,0,?,3 +ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.451,1250,762,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,900,0,?,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,4880,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1320,0,?,0,?,3 +?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,640,0,?,500,?,3 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,609.9,3000,?,0,?,5 +TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,609.9,612,?,0,?,5 +?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1500,4170,?,0,?,2 +TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,1,?,0,?,5 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,2 +?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,830,880,?,0,?,2 +?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,150,762,?,0,?,2 +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,20,0,?,0,?,U +?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,610,0,?,500,?,U +% +% +% diff --git a/sklearn/datasets/tests/mock_openml/2/data_description.json b/sklearn/datasets/tests/mock_openml/2/data_description.json new file mode 100644 index 0000000000000..dabc7f5718435 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/data_description.json @@ -0,0 +1,19 @@ +{ + "data_set_description": { + "id": "2", + "name": "anneal", + "version": "1", + "description": "**Author**: Unknown. Donated by David Sterling and Wray Buntine \n**Source**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/datasets\/Annealing) - 1990 \n**Please cite**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/citation_policy.html) \n\nThe original Annealing dataset from UCI. The exact meaning of the features and classes is largely unknown. Annealing, in metallurgy and materials science, is a heat treatment that alters the physical and sometimes chemical properties of a material to increase its ductility and reduce its hardness, making it more workable. It involves heating a material to above its recrystallization temperature, maintaining a suitable temperature, and then cooling. (Wikipedia)\n\n### Attribute Information:\n 1. family: --,GB,GK,GS,TN,ZA,ZF,ZH,ZM,ZS\n 2. product-type: C, H, G\n 3. steel: -,R,A,U,K,M,S,W,V\n 4. carbon: continuous\n 5. hardness: continuous\n 6. temper_rolling: -,T\n 7. condition: -,S,A,X\n 8. formability: -,1,2,3,4,5\n 9. strength: continuous\n 10. non-ageing: -,N\n 11. surface-finish: P,M,-\n 12. surface-quality: -,D,E,F,G\n 13. enamelability: -,1,2,3,4,5\n 14. bc: Y,-\n 15. bf: Y,-\n 16. bt: Y,-\n 17. bw\/me: B,M,-\n 18. bl: Y,-\n 19. m: Y,-\n 20. chrom: C,-\n 21. phos: P,-\n 22. cbond: Y,-\n 23. marvi: Y,-\n 24. exptl: Y,-\n 25. ferro: Y,-\n 26. corr: Y,-\n 27. blue\/bright\/varn\/clean: B,R,V,C,-\n 28. lustre: Y,-\n 29. jurofm: Y,-\n 30. s: Y,-\n 31. p: Y,-\n 32. shape: COIL, SHEET\n 33. thick: continuous\n 34. width: continuous\n 35. len: continuous\n 36. oil: -,Y,N\n 37. bore: 0000,0500,0600,0760\n 38. packing: -,1,2,3\n classes: 1,2,3,4,5,U\n \n -- The '-' values are actually 'not_applicable' values rather than\n 'missing_values' (and so can be treated as legal discrete\n values rather than as showing the absence of a discrete value).", + "format": "ARFF", + "upload_date": "2014-04-06T23:19:24", + "licence": "Public", + "url": "https:\/\/www.openml.org\/data\/v1\/download\/1666876\/anneal.arff", + "file_id": "1666876", + "default_target_attribute": "class", + "version_label": "1", + "tag": ["study_1", "study_14", "study_34", "study_37", "study_41", "study_70", "study_76", "uci"], + "visibility": "public", + "status": "active", + "md5_checksum": "4eaed8b6ec9d8211024b6c089b064761" + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/data_features.json b/sklearn/datasets/tests/mock_openml/2/data_features.json new file mode 100644 index 0000000000000..b859302867253 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/data_features.json @@ -0,0 +1,317 @@ +{ + "data_features": { + "feature": [{ + "index": "0", + "name": "family", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "772" + }, { + "index": "1", + "name": "product-type", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "2", + "name": "steel", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "86" + }, { + "index": "3", + "name": "carbon", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "4", + "name": "hardness", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "5", + "name": "temper_rolling", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "761" + }, { + "index": "6", + "name": "condition", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "303" + }, { + "index": "7", + "name": "formability", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "318" + }, { + "index": "8", + "name": "strength", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "9", + "name": "non-ageing", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "793" + }, { + "index": "10", + "name": "surface-finish", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "889" + }, { + "index": "11", + "name": "surface-quality", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "244" + }, { + "index": "12", + "name": "enamelability", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "882" + }, { + "index": "13", + "name": "bc", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "897" + }, { + "index": "14", + "name": "bf", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "769" + }, { + "index": "15", + "name": "bt", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "824" + }, { + "index": "16", + "name": "bw%2Fme", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "687" + }, { + "index": "17", + "name": "bl", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "749" + }, { + "index": "18", + "name": "m", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "19", + "name": "chrom", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "872" + }, { + "index": "20", + "name": "phos", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "891" + }, { + "index": "21", + "name": "cbond", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "824" + }, { + "index": "22", + "name": "marvi", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "23", + "name": "exptl", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "896" + }, { + "index": "24", + "name": "ferro", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "868" + }, { + "index": "25", + "name": "corr", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "26", + "name": "blue%2Fbright%2Fvarn%2Fclean", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "892" + }, { + "index": "27", + "name": "lustre", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "847" + }, { + "index": "28", + "name": "jurofm", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "29", + "name": "s", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "30", + "name": "p", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "31", + "name": "shape", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "32", + "name": "thick", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "33", + "name": "width", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "34", + "name": "len", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "35", + "name": "oil", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "834" + }, { + "index": "36", + "name": "bore", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "37", + "name": "packing", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "889" + }, { + "index": "38", + "name": "class", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 4280c3f106b8a..bd8d7f0f7a47d 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -110,13 +110,14 @@ def test_fetch_openml_iris(monkeypatch): expect_sparse=False) -def test_fetch_openml_anneal(): +def test_fetch_openml_anneal(monkeypatch): # classification dataset with numeric and categorical columns data_id = 2 data_name = 'anneal' data_version = 1 expected_observations = 898 expected_features = 38 + _monkey_patch_webbased_functions(monkeypatch, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, expect_sparse=False) From c7c83a6a2b15332e710851fcf2e76c4488c95274 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sun, 15 Jul 2018 13:51:34 -0400 Subject: [PATCH 044/138] fixed travis doc test and line size --- doc/datasets/openml.rst | 11 ++++++----- sklearn/datasets/openml.py | 30 +++++++++++++++++++----------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index eb75dd83f179a..f83d93da9c3e3 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -24,7 +24,8 @@ from the repository using the function For example, to download a dataset of gene expressions in mice brains:: >>> from sklearn.datasets import fetch_openml - >>> mice = fetch_openml('miceprotein', version=4, data_home=custom_data_home) + >>> mice = fetch_openml(name='miceprotein', version=4, + data_home=custom_data_home) To fully specify a dataset, you need to provide a name and a version, though the version is optional, see :ref:`openml_versions`_ below. @@ -96,8 +97,8 @@ entirely different datasets. If a particular version of a dataset has been found to contain significant issues, it might be inactivated. Using a name to specify a dataset will yield the earliest version of a dataset that is still active. That means that -``fetch_openml("miceprotein")`` can yield different results at different times -if earlier versions become inactive. +``fetch_openml(name="miceprotein")`` can yield different results at different +times if earlier versions become inactive. You can see that the dataset with id 40966 that we fetched above is the version 1 of the "miceprotein" dataset:: @@ -107,7 +108,7 @@ of the "miceprotein" dataset:: In fact, this dataset only has one version. The iris dataset on the other hand has multiple versions:: - >>> iris = fetch_openml("iris", data_home=custom_data_home) + >>> iris = fetch_openml(name="iris", data_home=custom_data_home) >>> iris.details['version'] #doctest: +SKIP '1' >>> iris.details['id'] #doctest: +SKIP @@ -135,7 +136,7 @@ a binarized version of the data:: dtype='|S1') You can also specify both the name and the version, which also uniquely identifies the dataset:: - >>> iris_version_3 = fetch_openml("iris", version=3, data_home=custom_data_home) + >>> iris_version_3 = fetch_openml(name="iris", version=3, data_home=custom_data_home) >>> iris_version_3.details['version'] '3' >>> iris_version_3.details['id'] diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index a374737b9dd2d..a9fec6775fa45 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -66,14 +66,14 @@ def _get_data_info_by_name(name, version): version : int or str If version is an integer, the exact name/version will be obtained from OpenML. If version is a string (value: "active") it will take the first - version from OpenML that is annotated as active. Any other string values - except "active" are treated as integer. + version from OpenML that is annotated as active. Any other string + values except "active" are treated as integer. Returns ------- json_data['data']['dataset'][0]: json - json representation of the first dataset object that adhired to the search - criteria + json representation of the first dataset object that adhired to the + search criteria """ data_found = True @@ -81,7 +81,8 @@ def _get_data_info_by_name(name, version): if version == "active": response = urlopen(_SEARCH_NAME.format(name) + "/status/active/") else: - response = urlopen((_SEARCH_NAME + "/data_version/{}").format(name, version)) + response = urlopen((_SEARCH_NAME + + "/data_version/{}").format(name, version)) except HTTPError as error: if error.code == 412: data_found = False @@ -92,9 +93,12 @@ def _get_data_info_by_name(name, version): # might have been deactivated. will warn later data_found = True try: - response = urlopen((_SEARCH_NAME + "/data_version/{}/status/deactivated").format(name, version)) + url = (_SEARCH_NAME + + "/data_version/{}/status/deactivated").format(name, version) + response = urlopen(url) except HTTPError as error: - # 412 is an OpenML specific error code, indicating a generic error (e.g., data not found) + # 412 is an OpenML specific error code, indicating a generic error + # (e.g., data not found) if error.code == 412: data_found = False else: @@ -132,7 +136,8 @@ def _get_data_features(data_id): try: response = urlopen(_DATA_FEATURES.format(data_id)) except HTTPError as error: - # 412 is an OpenML specific error code, indicating a generic error (e.g., data not found) + # 412 is an OpenML specific error code, indicating a generic error + # (e.g., data not found) if error.code == 412: data_found = False else: @@ -256,7 +261,8 @@ def mem(func): " been found in the dataset. Try using a newer version.".format( data_description['version'], data_description['name'])) if target_column_name == "default-target": - target_column_name = data_description.get('default_target_attribute', None) + target_column_name = data_description.get('default_target_attribute', + None) # download actual data features = _get_data_features_(data_id) @@ -271,7 +277,8 @@ def mem(func): 'false' and feature['is_row_identifier'] == 'false'): data_columns.append(feature['name']) - data = _convert_arff_data(_download_data_(data_description['file_id'])['data']) + arff_data = _download_data_(data_description['file_id'])['data'] + data = _convert_arff_data(arff_data) data = _convert_numericals(data, name_feature) if target_column_name is not None: @@ -284,7 +291,8 @@ def mem(func): dtype = None else: dtype = object - col_slice = [int(name_feature[col_name]['index']) for col_name in data_columns] + col_slice = [int(name_feature[col_name]['index']) + for col_name in data_columns] X = data[:, col_slice].astype(dtype) description = u"{}\n\nDownloaded from openml.org.".format( From 280292cf328df5552e7472e800f1c18544e704a2 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sun, 15 Jul 2018 14:29:02 -0400 Subject: [PATCH 045/138] fix indent for unit test --- sklearn/datasets/tests/test_openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index bd8d7f0f7a47d..765f15fa3d996 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -59,7 +59,7 @@ def _monkey_patch_webbased_functions(context, data_id): def _mock_data_description(id): path = os.path.join(testdir_path, - 'mock_openml/%d/data_description.json' % id) + 'mock_openml/%d/data_description.json' % id) description = open(path, 'r').read() return json.loads(description)['data_set_description'] From 63a61671ab0785cb0369fef9c20b3248439e8426 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sun, 15 Jul 2018 14:42:07 -0400 Subject: [PATCH 046/138] doctest --- doc/datasets/openml.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index f83d93da9c3e3..2d6ac75e20a6a 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -24,8 +24,7 @@ from the repository using the function For example, to download a dataset of gene expressions in mice brains:: >>> from sklearn.datasets import fetch_openml - >>> mice = fetch_openml(name='miceprotein', version=4, - data_home=custom_data_home) + >>> mice = fetch_openml(name='miceprotein', version=4, data_home=custom_data_home) To fully specify a dataset, you need to provide a name and a version, though the version is optional, see :ref:`openml_versions`_ below. From 8856a919a0e13491965f12d3ac15ab76f43b8cbc Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sun, 15 Jul 2018 15:02:12 -0400 Subject: [PATCH 047/138] mocked more unit tests --- .../tests/mock_openml/292/Australian_1.json | 43 ++ .../mock_openml/292/Australian_active.json | 41 + .../datasets/tests/mock_openml/292/data.arff | 719 ++++++++++++++++++ .../mock_openml/292/data_description.json | 20 + .../tests/mock_openml/292/data_features.json | 125 +++ .../datasets/tests/mock_openml/561/cpu_1.json | 43 ++ .../tests/mock_openml/561/cpu_active.json | 81 ++ .../datasets/tests/mock_openml/561/data.arff | 303 ++++++++ .../mock_openml/561/data_description.json | 17 + .../tests/mock_openml/561/data_features.json | 69 ++ sklearn/datasets/tests/test_openml.py | 28 +- 11 files changed, 1472 insertions(+), 17 deletions(-) create mode 100644 sklearn/datasets/tests/mock_openml/292/Australian_1.json create mode 100644 sklearn/datasets/tests/mock_openml/292/Australian_active.json create mode 100644 sklearn/datasets/tests/mock_openml/292/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/292/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/292/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/561/cpu_1.json create mode 100644 sklearn/datasets/tests/mock_openml/561/cpu_active.json create mode 100644 sklearn/datasets/tests/mock_openml/561/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/561/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/561/data_features.json diff --git a/sklearn/datasets/tests/mock_openml/292/Australian_1.json b/sklearn/datasets/tests/mock_openml/292/Australian_1.json new file mode 100644 index 0000000000000..1fd7e551465a3 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/292/Australian_1.json @@ -0,0 +1,43 @@ +{ + "data": { + "dataset": [{ + "did": 292, + "name": "Australian", + "version": 1, + "status": "deactivated", + "format": "Sparse_ARFF", + "file_id": 49822, + "quality": [{ + "name": "MajorityClassSize", + "value": "383.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "2.0" + }, { + "name": "MinorityClassSize", + "value": "307.0" + }, { + "name": "NumberOfClasses", + "value": "2.0" + }, { + "name": "NumberOfFeatures", + "value": "15.0" + }, { + "name": "NumberOfInstances", + "value": "690.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "14.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "1.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/Australian_active.json b/sklearn/datasets/tests/mock_openml/292/Australian_active.json new file mode 100644 index 0000000000000..74c4cbf473e7f --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/292/Australian_active.json @@ -0,0 +1,41 @@ +{ + "_comment": "JvR: I changed the did to 292 (although this version is inactive), in order to prevent multiple copies.", + "data": { + "dataset": [{ + "did": 292, + "name": "Australian", + "version": 4, + "status": "active", + "format": "ARFF", + "file_id": 18151910, + "quality": [{ + "name": "MajorityClassSize", + "value": "383.0" + }, { + "name": "MinorityClassSize", + "value": "307.0" + }, { + "name": "NumberOfClasses", + "value": "2.0" + }, { + "name": "NumberOfFeatures", + "value": "15.0" + }, { + "name": "NumberOfInstances", + "value": "690.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "6.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "9.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/data.arff b/sklearn/datasets/tests/mock_openml/292/data.arff new file mode 100644 index 0000000000000..16ae263d173d0 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/292/data.arff @@ -0,0 +1,719 @@ +% Dataset australian +% +% This data file was automatically converted from sparse data format. +% It was used in the large scale SVM experiments (http://www.largescalesvm.de) +% Original data has been normalized columnwise according to the following rules: +% If a column only contains one value (constant feature), it will set to zero and thus removed by sparsity. +% If a column contains two values (binary feature), the value occuring more often will be set to zero, the other to one. +% If a column contains more than two values (multinary/real feature), the column is divided by its std deviation. +% + +@RELATION australian + +@ATTRIBUTE Y {1, -1} +@ATTRIBUTE X1 numeric +@ATTRIBUTE X2 numeric +@ATTRIBUTE X3 numeric +@ATTRIBUTE X4 numeric +@ATTRIBUTE X5 numeric +@ATTRIBUTE X6 numeric +@ATTRIBUTE X7 numeric +@ATTRIBUTE X8 numeric +@ATTRIBUTE X9 numeric +@ATTRIBUTE X10 numeric +@ATTRIBUTE X11 numeric +@ATTRIBUTE X12 numeric +@ATTRIBUTE X13 numeric +@ATTRIBUTE X14 numeric + +@DATA +{0 -1, 1 1, 2 -0.7494737, 3 -0.1814286, 5 -0.5384615, 6 -0.25, 7 -0.8887719, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.97576} +{0 -1, 1 -1, 2 -0.7317293, 3 -0.5, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} +{0 -1, 1 -1, 2 -0.5239098, 3 -0.875, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} +{0 1, 1 -1, 2 -0.7618045, 3 -0.1785714, 4 -1, 5 -0.3846154, 6 -0.5, 7 -1, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -1, 14 -1} +{0 1, 1 1, 2 -0.8069173, 3 -0.4164286, 5 -0.2307692, 6 -0.25, 7 -0.8624561, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -0.94, 14 -0.99684} +{0 1, 1 -1, 2 -0.9374436, 3 -0.9582143, 5 0.07692308, 6 0.75, 7 -0.8947368, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 1, 2 -0.8896241, 3 -0.5357143, 5 -0.6923077, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.94, 14 -0.998} +{0 1, 1 -1, 2 0.3509774, 3 -0.6814286, 5 0.5384615, 6 0.75, 7 -0.7866667, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.957, 14 -0.9888} +{0 -1, 1 1, 2 -0.5765414, 3 -0.9285714, 4 -1, 5 -0.8461538, 6 0.75, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.824, 14 -0.98926} +{0 -1, 1 -1, 2 0.2631579, 3 -0.4942857, 5 -0.5384615, 6 0.75, 7 -0.5263158, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.9, 14 -0.999} +{0 1, 1 1, 2 -0.406015, 3 -0.875, 5 1, 6 0.75, 7 -0.6842105, 8 1, 9 1, 10 -0.880597, 11 1, 13 -0.747, 14 -0.98286} +{0 1, 1 1, 2 -0.1678196, 3 -0.6428571, 5 0.5384615, 6 0.75, 7 -0.6491228, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.53, 14 -1} +{0 -1, 1 1, 2 -0.7918797, 3 -0.9107143, 4 -1, 5 0.07692308, 6 0.75, 7 -0.9035088, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.86, 14 -0.9958} +{0 1, 1 1, 2 -0.3633083, 3 -0.6428571, 5 1, 6 0.75, 7 -0.4736842, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -1, 14 -0.98} +{0 -1, 1 1, 2 0.3482707, 3 -0.8064286, 5 0.07692308, 6 -0.25, 7 -0.8305263, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.68, 14 -1} +{0 1, 1 1, 2 0.03248126, 3 -0.5685714, 5 -0.5384615, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9462} +{0 1, 1 1, 2 -0.5239098, 3 -0.6785714, 5 0.2307692, 6 -0.25, 7 -0.4736842, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.67, 14 -1} +{0 1, 1 -1, 2 -0.8445113, 3 -0.3571429, 5 -0.2307692, 6 -0.25, 7 -0.9473684, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.912, 14 -0.98818} +{0 -1, 1 1, 2 -0.8120301, 3 -0.9107143, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -0.99992} +{0 1, 1 -1, 2 -0.7392481, 3 -0.5953571, 5 0.5384615, 6 -0.25, 7 -0.8185965, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -0.871, 14 -0.93486} +{0 -1, 1 -1, 2 -0.5663158, 3 -0.9582143, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -0.97992} +{0 -1, 1 -1, 2 -0.8369925, 3 -0.9582143, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9589474, 8 1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} +{0 -1, 1 1, 2 -0.1753384, 3 -0.9046429, 5 -0.8461538, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.832, 14 -1} +{0 -1, 1 1, 2 -0.1630075, 3 -0.875, 5 -0.5384615, 6 -0.25, 7 -0.9852632, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} +{0 -1, 1 1, 2 -0.8270677, 3 -0.3153571, 5 -0.2307692, 6 -0.25, 7 -0.9445614, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.993} +{0 1, 1 1, 2 -0.4285714, 3 -0.8928571, 5 0.8461538, 6 0.75, 7 -0.6140351, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.7368421, 3 -0.9910714, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.9986} +{0 1, 1 1, 2 -0.4159399, 3 -0.7828571, 4 -1, 5 0.07692308, 6 0.75, 7 -0.8568421, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.82, 14 -0.63946} +{0 1, 1 -1, 2 -0.4911278, 3 -0.1428571, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.78, 14 -0.99962} +{0 1, 1 1, 2 -0.7193985, 3 -0.8214286, 5 0.07692308, 6 -0.25, 7 -0.9238596, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.94, 14 -0.95632} +{0 1, 1 1, 2 -0.6015038, 3 -0.9464286, 5 0.07692308, 6 0.75, 7 -0.7017544, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.688, 14 -0.997} +{0 -1, 1 -1, 2 -0.7993985, 3 -0.25, 4 -1, 5 1, 6 0.75, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.846, 14 -0.99936} +{0 -1, 1 1, 2 0.1603008, 3 -0.9017857, 4 -1, 5 0.07692308, 6 0.75, 7 -0.3361404, 8 1, 9 -1, 10 -1, 11 1, 13 -0.8, 14 -0.998} +{0 1, 1 1, 2 -0.7193985, 3 -0.1785714, 5 0.2307692, 6 0.75, 7 -0.8508772, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.71, 14 -0.99432} +{0 -1, 1 1, 2 -0.1254135, 3 -0.9107143, 5 -0.07692308, 6 -0.25, 7 -0.02631579, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.648, 14 -0.99776} +{0 -1, 1 1, 2 0.8369925, 3 0.3571429, 4 -1, 5 -1, 6 -1, 7 -0.997193, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -0.99298} +{0 1, 1 1, 2 -0.6616541, 3 -0.1071429, 5 -0.2307692, 6 -0.25, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.98, 14 -1} +{0 1, 1 1, 2 -0.2231578, 3 -0.006071429, 5 0.2307692, 6 -0.25, 7 -0.3947368, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.93, 14 -1} +{0 1, 1 -1, 2 0.02255639, 3 -0.4285714, 5 0.07692308, 6 -0.25, 7 -0.4473684, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -1, 14 -0.9748} +{0 1, 1 -1, 2 0.01263152, 3 -0.7857143, 5 1, 6 -0.25, 7 -0.02631579, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.481, 14 -0.96592} +{0 1, 1 1, 2 -0.7166917, 3 -1, 5 0.8461538, 6 -0.25, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.7344361, 3 -0.8928571, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9621053, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -0.99866} +{0 1, 1 1, 2 -0.6090226, 3 -0.9196429, 5 1, 6 0.75, 7 -0.9122807, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.89404} +{0 -1, 1 1, 2 0.4911279, 3 -0.9614286, 5 0.07692308, 6 -0.25, 7 -0.9589474, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.82, 14 -1} +{0 -1, 1 1, 2 -0.6992481, 3 -0.9703571, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.872, 14 -0.99988} +{0 1, 1 -1, 2 -0.7894737, 3 -0.2678571, 5 0.5384615, 6 -0.25, 7 -0.9501754, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.951, 14 -1} +{0 -1, 1 -1, 2 -0.6766917, 3 -0.875, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.868, 14 -1} +{0 1, 1 1, 2 -0.927218, 3 -0.9971429, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.5263158, 3 -0.8571429, 4 -1, 5 0.3846154, 6 0.75, 7 -0.8596491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.744, 14 -0.99966} +{0 1, 1 -1, 2 0.1753384, 3 0.07142857, 5 0.07692308, 6 -0.25, 7 -0.6140351, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -1, 14 -0.956} +{0 -1, 1 1, 2 -0.4412029, 3 -0.75, 5 -0.5384615, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.768, 14 -1} +{0 -1, 1 1, 2 -0.7795489, 3 -0.7053571, 4 -1, 5 -0.6923077, 6 0.75, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -0.998} +{0 -1, 1 1, 2 -0.5663158, 3 -0.9910714, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.784, 14 -0.958} +{0 -1, 1 1, 2 -0.8421053, 3 -0.875, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8361404, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.888, 14 -0.99988} +{0 -1, 1 1, 2 -0.5840602, 3 -0.7678571, 4 -1, 5 0.5384615, 6 0.75, 7 -0.6431579, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.631, 14 -0.99998} +{0 1, 1 1, 2 -0.5765414, 3 -0.8928571, 5 0.2307692, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.566, 14 -0.9993} +{0 1, 1 1, 2 -0.2105263, 3 -0.5357143, 5 -0.2307692, 7 -0.754386, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.99} +{0 -1, 1 -1, 2 -0.290827, 3 -0.8214286, 5 -0.6923077, 6 0.75, 7 -0.9852632, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -0.99508} +{0 1, 1 1, 2 -0.1353383, 3 -0.6489286, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.7778947, 8 1, 9 -1, 10 -1, 11 1, 13 -0.948, 14 -0.97116} +{0 1, 1 1, 2 0.2932331, 3 -0.125, 5 -0.07692308, 6 -0.25, 7 -0.9122807, 8 1, 9 1, 10 -0.880597, 11 1, 13 -0.8, 14 -1} +{0 -1, 1 1, 2 -0.115188, 3 -0.6428571, 5 -0.6923077, 7 -0.8421053, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.859, 14 -1} +{0 -1, 1 -1, 2 -0.6992481, 3 -0.9492857, 5 0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.76, 14 -0.99992} +{0 1, 1 1, 2 -0.8571429, 3 -0.8571429, 5 -0.6923077, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.88, 14 -0.994} +{0 -1, 1 -1, 2 -0.1855638, 3 -0.75, 5 -0.6923077, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 0.16, 14 -1} +{0 1, 1 -1, 2 -0.6766917, 3 -0.9642857, 5 0.5384615, 6 0.75, 7 -0.8947368, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.98352} +{0 1, 1 1, 2 -0.1503759, 3 -0.3007143, 5 1, 6 0.75, 7 -0.4414035, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.8270677, 3 -0.9882143, 5 0.5384615, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.62, 14 -1} +{0 -1, 1 1, 2 -0.7669173, 3 -0.1785714, 5 -0.6923077, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.99864} +{0 -1, 1 1, 2 -0.4736842, 3 -0.7975, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.8507463, 11 -1, 13 -0.824, 14 -0.99708} +{0 1, 1 1, 2 -0.593985, 3 -0.8867857, 5 0.8461538, 6 0.75, 7 -0.8712281, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.417, 14 -0.98574} +{0 -1, 1 1, 2 0.05263158, 3 0.8810714, 4 -1, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.4986466, 3 -0.9017857, 5 0.2307692, 6 0.75, 7 -0.997193, 8 -1, 9 1, 10 -0.9104478, 11 -1, 13 -1, 14 -0.99934} +{0 -1, 1 1, 2 -0.5287218, 3 -0.9107143, 5 0.2307692, 6 -0.25, 7 -0.877193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -1} +{0 1, 1 1, 2 -0.5639098, 3 -0.64, 4 -1, 5 0.07692308, 7 -0.8947368, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.856, 14 -0.99986} +{0 1, 1 1, 2 -0.2030075, 3 0.5357143, 5 0.3846154, 6 1, 7 0.4035088, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.976} +{0 -1, 1 1, 2 -0.3157895, 3 -0.6964286, 5 0.5384615, 6 -0.25, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.546, 14 -0.999} +{0 -1, 1 1, 2 -0.6442105, 3 -0.9760714, 5 -0.5384615, 6 0.75, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.66, 14 -1} +{0 -1, 1 1, 2 -0.516391, 3 -0.75, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.784, 14 -1} +{0 -1, 1 1, 2 -0.7193985, 3 -1, 5 -0.5384615, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.6716418, 11 -1, 12 -1, 13 -1, 14 -1} +{0 1, 1 -1, 2 -0.4460151, 3 -0.8957143, 5 0.2307692, 6 -0.25, 7 -0.9238596, 8 1, 9 1, 10 -0.5223881, 11 -1, 13 -0.88, 14 -0.95842} +{0 1, 1 1, 2 -0.6565414, 3 -0.75, 5 0.8461538, 6 -0.25, 7 -0.9561404, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -1, 14 -0.85882} +{0 -1, 1 -1, 2 -0.3557895, 3 -0.7321429, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.8208955, 11 -1, 13 -1, 14 -0.996} +{0 -1, 1 -1, 2 -0.8547368, 3 -0.2857143, 5 -0.8461538, 6 -0.25, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.99916} +{0 -1, 1 1, 2 -0.2129324, 3 -0.6428571, 5 -0.6923077, 7 -0.9852632, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.45, 14 -1} +{0 -1, 1 1, 2 -0.7091729, 3 -0.9285714, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.72, 14 -1} +{0 1, 1 1, 2 -0.2833082, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} +{0 -1, 1 -1, 2 -0.6691729, 3 -0.02392857, 5 0.5384615, 6 0.75, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99998} +{0 1, 1 -1, 3 -0.07142857, 5 -0.6923077, 7 -0.6375439, 8 1, 9 1, 10 -0.7313433, 11 1, 13 -1, 14 -1} +{0 1, 1 1, 2 -0.3858647, 3 -0.625, 5 0.2307692, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.71, 14 -0.99988} +{0 -1, 1 1, 2 -0.7467669, 3 -0.9582143, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 1, 2 -0.5789474, 3 -0.9078571, 5 -0.5384615, 6 0.75, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.86, 14 -1} +{0 -1, 1 1, 2 -0.1278195, 3 -0.7082143, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.892, 14 -0.998} +{0 -1, 1 1, 2 -0.5512782, 3 0.03571429, 5 -0.8461538, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99428} +{0 1, 1 1, 2 -0.3233083, 3 -0.6428571, 5 0.07692308, 7 -0.8245614, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -1, 14 -0.99266} +{0 -1, 1 -1, 2 -0.8670677, 3 -0.2857143, 4 -1, 5 0.5384615, 6 0.75, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.66, 14 -1} +{0 1, 1 1, 2 -0.7744361, 3 -0.8928571, 5 0.2307692, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.85, 14 -0.99984} +{0 -1, 1 -1, 2 -0.2430076, 3 -0.8810714, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9922} +{0 -1, 1 1, 2 -0.4562406, 3 -0.9971429, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.8923308, 3 -0.3214286, 5 -0.2307692, 6 -0.25, 7 -0.877193, 8 -1, 9 1, 10 -0.7014925, 11 1, 13 -1, 14 -0.9998} +{0 1, 1 -1, 2 -0.7993985, 3 -0.9403571, 5 0.5384615, 6 -0.25, 7 -0.8887719, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.2381954, 3 -0.7142857, 5 0.07692308, 6 -0.25, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.52, 14 -1} +{0 1, 1 1, 2 -0.2505264, 3 -0.985, 5 -0.5384615, 6 -0.25, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} +{0 1, 1 1, 2 -0.5813534, 3 -0.01785714, 5 0.2307692, 6 -0.25, 7 -0.5964912, 8 1, 9 -1, 10 -1, 11 1, 13 -0.513, 14 -0.99} +{0 1, 1 1, 2 -0.5789474, 3 -0.9582143, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.9824561, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.74, 14 -0.99} +{0 -1, 1 1, 2 -0.8421053, 3 -1, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.880597, 11 -1, 13 -0.955, 14 -0.99998} +{0 1, 1 -1, 2 -0.6616541, 3 -0.9375, 5 1, 6 0.75, 7 -0.9270175, 8 1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -0.8828} +{0 1, 1 1, 2 -0.5813534, 3 -0.8571429, 5 1, 6 0.75, 7 -0.9298246, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.86, 14 -0.84912} +{0 -1, 1 1, 2 -0.7443609, 3 -0.3571429, 5 -0.2307692, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 1, 1 -1, 2 0.08511284, 3 -0.02964286, 5 -0.5384615, 6 0.75, 7 -0.4035088, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.4412029, 3 -0.8214286, 5 0.07692308, 6 -0.25, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} +{0 -1, 1 1, 2 -0.2631579, 3 -0.2767857, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} +{0 -1, 1 1, 2 0.009924872, 3 -0.5357143, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.99544} +{0 -1, 1 1, 2 -0.5765414, 3 -0.7142857, 4 -1, 5 -0.6923077, 6 0.75, 7 -0.5964912, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.925, 14 -1} +{0 1, 1 -1, 2 -0.3383459, 3 -0.9346429, 5 -0.2307692, 6 -0.25, 7 -0.9473684, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -1, 14 -0.96834} +{0 -1, 1 1, 2 -0.403609, 3 -0.9821429, 5 -0.6923077, 7 -0.7192982, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.58, 14 -1} +{0 1, 1 1, 2 -0.3885714, 3 -0.9942857, 4 -1, 5 -0.07692308, 7 -0.997193, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.72, 14 -0.96} +{0 1, 1 -1, 2 -0.7894737, 3 -0.2617857, 5 0.8461538, 6 0.75, 7 -0.9764912, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.92, 14 -0.999} +{0 1, 1 1, 2 -0.4159399, 3 -0.9285714, 5 1, 6 -0.25, 7 -0.9473684, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.66, 14 -0.91858} +{0 1, 1 1, 2 -0.7293233, 3 -0.2142857, 5 0.5384615, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.9, 14 -0.98382} +{0 1, 1 1, 2 0.05263158, 3 -0.3928571, 5 0.07692308, 6 0.75, 7 -0.122807, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.819, 14 -0.9669} +{0 1, 1 1, 2 -0.1930826, 3 -0.6428571, 5 0.07692308, 6 -0.25, 7 -0.6491228, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -1, 14 -0.9387} +{0 -1, 1 1, 2 -0.7918797, 3 -0.9403571, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.76, 14 -1} +{0 -1, 1 -1, 2 -0.2481203, 3 -0.8928571, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.924, 14 -1} +{0 1, 1 -1, 2 0.303158, 3 0.3928571, 5 0.07692308, 6 -0.25, 7 -0.6140351, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -1, 14 -0.94} +{0 1, 1 -1, 2 -0.4736842, 3 -0.7321429, 5 0.8461538, 6 0.75, 7 -0.9561404, 8 1, 9 1, 10 -0.7313433, 11 1, 13 -0.819, 14 -1} +{0 -1, 1 1, 2 -0.7518797, 3 -0.9435714, 5 0.2307692, 6 -0.25, 7 -0.9796491, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.58, 14 -0.99434} +{0 1, 1 -1, 2 0.3407519, 3 -0.2857143, 5 0.5384615, 6 -0.25, 7 -0.7192982, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -1, 14 -0.96796} +{0 -1, 1 1, 2 -0.5437594, 3 -0.9732143, 5 0.07692308, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.78, 14 -0.9972} +{0 1, 1 -1, 2 -0.03007519, 3 -0.7142857, 5 -0.3846154, 6 -0.5, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -0.9808} +{0 1, 1 1, 2 -0.7819549, 3 -0.7857143, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.9238596, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.84, 14 -0.99998} +{0 1, 1 -1, 2 -0.6691729, 3 -0.1071429, 5 -0.2307692, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.88, 14 -0.98866} +{0 -1, 1 -1, 2 -0.7870677, 3 -0.9642857, 4 -1, 5 0.3846154, 6 -0.75, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -1} +{0 -1, 1 1, 2 -0.6742857, 3 -0.03571429, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.816, 14 -1} +{0 -1, 1 -1, 2 -0.6165414, 3 -0.8064286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.92, 14 -1} +{0 -1, 1 1, 2 -0.1828572, 3 -0.9403571, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.87, 14 -0.99998} +{0 -1, 1 -1, 2 -0.2607518, 3 -0.6846429, 5 0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} +{0 -1, 1 1, 2 -0.8246617, 3 -0.9582143, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9104478, 11 -1, 13 -0.65, 14 -0.98462} +{0 1, 1 1, 2 -0.2330827, 3 -0.3214286, 5 -0.07692308, 6 -0.25, 7 -0.5438596, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -0.76, 14 -0.90786} +{0 1, 1 1, 2 -0.6390977, 3 -0.9642857, 5 0.07692308, 6 -0.25, 7 -0.8975439, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.688, 14 -1} +{0 1, 1 -1, 2 -0.02766911, 3 -0.7857143, 5 0.07692308, 6 -0.25, 7 -0.8333333, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.604, 14 -0.91682} +{0 -1, 1 1, 2 -0.8219549, 3 -0.2857143, 4 -1, 5 -0.5384615, 6 0.75, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 1, 13 -0.86, 14 -1} +{0 -1, 1 -1, 2 -0.7443609, 3 -0.9107143, 4 -1, 5 -1, 6 -1, 7 -0.7719298, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -1} +{0 -1, 1 1, 2 -0.847218, 3 -0.7471429, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -0.99998} +{0 1, 1 1, 2 0.5136843, 3 0.4285714, 5 1, 6 0.75, 7 0.2280702, 8 1, 9 1, 10 -0.7313433, 11 1, 13 -1, 14 -0.98} +{0 -1, 1 -1, 2 -0.9172932, 3 -0.9107143, 5 0.5384615, 6 -0.25, 7 -0.9824561, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.892, 14 -0.99804} +{0 1, 1 -1, 2 0.6517293, 3 0.07142857, 5 0.3846154, 6 1, 7 -1, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -1, 14 -0.93248} +{0 1, 1 1, 2 0.8947368, 3 0.5921429, 5 0.3846154, 6 1, 7 -0.1052632, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -1, 14 -0.99782} +{0 -1, 1 -1, 2 -0.9347368, 3 -0.7946429, 5 0.5384615, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} +{0 -1, 1 1, 2 -0.366015, 3 -0.7142857, 5 -0.8461538, 7 -0.122807, 8 1, 9 -1, 10 -1, 11 1, 13 -0.816, 14 -1} +{0 1, 1 -1, 2 0.01263152, 3 -0.4285714, 5 0.3846154, 7 -0.5438596, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.625, 14 0.022} +{0 1, 1 1, 2 -0.7166917, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} +{0 -1, 1 1, 2 -0.05503765, 3 -0.8928571, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 1, 13 -0.86, 14 -1} +{0 -1, 1 1, 2 -0.9572932, 3 -0.5, 5 0.3846154, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.4, 14 -1} +{0 -1, 1 1, 2 -0.847218, 3 -0.9703571, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.8, 14 -0.99998} +{0 1, 1 1, 2 0.1654135, 3 -0.5357143, 5 -0.5384615, 6 -0.25, 7 -0.5585965, 8 1, 9 1, 10 -0.5522388, 11 -1, 13 -1, 14 -0.77596} +{0 1, 1 1, 2 -0.8369925, 3 -1, 4 -1, 5 -0.07692308, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.5, 14 -0.99998} +{0 1, 1 1, 2 -0.8721805, 3 -0.9882143, 5 0.5384615, 6 0.5, 7 -0.9852632, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.9992} +{0 -1, 1 1, 2 -0.2857143, 3 -0.9403571, 5 0.3846154, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.9999} +{0 1, 1 1, 2 -0.7317293, 3 -0.8867857, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.7835088, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.92, 14 -1} +{0 -1, 1 1, 2 0.02496247, 3 -0.7025, 5 1, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.48, 14 -1} +{0 -1, 1 1, 2 -0.3885714, 3 -0.8214286, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.54, 14 -0.99968} +{0 -1, 1 -1, 2 -0.4186466, 3 -0.8839286, 5 -0.8461538, 6 -0.25, 7 -0.9621053, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 1, 1 1, 2 -0.1178947, 3 -0.9732143, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9736842, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.7, 14 -0.99676} +{0 1, 1 1, 2 -0.3759398, 3 -0.7114286, 4 -1, 5 -0.6923077, 7 -0.4035088, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.805, 14 -1} +{0 -1, 1 1, 2 -0.1278195, 3 -0.7857143, 5 -0.6923077, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.996} +{0 -1, 1 1, 2 -0.8646617, 3 -0.9882143, 5 -0.8461538, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.72, 14 -1} +{0 -1, 1 1, 2 -0.7193985, 3 -0.8214286, 5 -1, 6 -1, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.91584} +{0 1, 1 -1, 2 -0.7368421, 3 -0.3957143, 4 -1, 5 1, 6 -0.25, 7 -0.8273684, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.836, 14 -1} +{0 -1, 1 1, 2 -0.8745865, 3 -0.9853571, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.985} +{0 -1, 1 1, 2 -0.8595489, 3 -0.2560714, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.9925} +{0 -1, 1 -1, 2 -0.5813534, 3 -0.8928571, 5 -0.07692308, 6 -0.25, 7 -0.8596491, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.632, 14 -1} +{0 1, 1 -1, 2 -0.8445113, 3 -0.3392857, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 1, 9 1, 10 -0.880597, 11 1, 13 -0.92, 14 -0.99} +{0 -1, 1 1, 2 -0.7317293, 3 -0.9464286, 5 -0.6923077, 6 -0.25, 7 -0.8887719, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.6, 14 -0.99982} +{0 -1, 1 1, 2 0.4661654, 3 -0.08928571, 4 -1, 5 0.07692308, 6 0.75, 7 -0.6491228, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.888, 14 -1} +{0 1, 1 -1, 2 -0.7067669, 3 -0.3571429, 5 0.5384615, 6 -0.25, 7 -0.4035088, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.88, 14 -1} +{0 -1, 1 1, 2 -0.3533835, 3 -0.7739286, 5 1, 6 0.75, 7 -0.7368421, 8 1, 9 -1, 10 -1, 11 1, 13 -0.32, 14 -1} +{0 -1, 1 -1, 2 0.2956392, 3 -0.6964286, 4 -1, 5 -1, 6 -1, 7 -0.6491228, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.99992} +{0 -1, 1 -1, 2 0.190376, 3 -0.9882143, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.938, 14 -0.99946} +{0 1, 1 1, 2 -0.1753384, 3 -0.7114286, 5 0.8461538, 6 0.75, 7 -0.5087719, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -0.68, 14 -1} +{0 1, 1 1, 2 -0.1452632, 3 -0.64, 5 0.5384615, 6 0.75, 7 -0.1052632, 8 1, 9 -1, 10 -1, 11 1, 13 -0.908, 14 -1} +{0 -1, 1 1, 2 -0.1753384, 3 -0.9107143, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9961} +{0 -1, 1 -1, 2 -0.3984962, 3 -0.9464286, 5 -0.5384615, 7 -0.9298246, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.788, 14 -1} +{0 1, 1 1, 2 -0.6415038, 3 -0.1071429, 5 0.8461538, 6 -0.25, 7 -0.9150877, 8 1, 9 1, 10 1, 11 1, 13 -0.86, 14 -0.99484} +{0 1, 1 1, 2 -0.6818045, 3 -0.5267857, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.6140351, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.9, 14 -1} +{0 1, 1 1, 2 -0.7118797, 3 -0.1696429, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -0.994} +{0 -1, 1 1, 2 -0.4911278, 3 -0.8214286, 5 0.8461538, 6 0.75, 7 -0.8421053, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.66, 14 -1} +{0 -1, 1 1, 2 -0.2956392, 3 -0.7142857, 5 0.07692308, 7 -0.6491228, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.72, 14 -1} +{0 -1, 1 1, 2 -0.6240602, 3 -0.89, 5 0.2307692, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 -1, 2 -0.518797, 3 -0.9525, 5 0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.7, 14 -1} +{0 -1, 1 -1, 2 -0.7218045, 3 -0.8689286, 5 -0.3846154, 6 -0.5, 7 -1, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.8, 14 -0.99894} +{0 -1, 1 1, 2 -0.8947368, 3 -0.7857143, 5 -0.5384615, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -0.9992} +{0 1, 1 1, 2 -0.5338346, 3 0.05642857, 5 -0.2307692, 6 -0.25, 7 -0.6463158, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.832, 14 -1} +{0 -1, 1 -1, 2 -0.553985, 3 -0.7471429, 5 -0.6923077, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 1, 13 -0.829, 14 -1} +{0 -1, 1 1, 2 -0.3735338, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} +{0 -1, 1 1, 2 -0.7091729, 3 -0.9582143, 5 0.07692308, 6 0.75, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} +{0 1, 1 1, 2 -0.6616541, 3 -0.1964286, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.4925373, 11 -1, 13 -0.8, 14 -0.97584} +{0 1, 1 -1, 2 -0.8496241, 3 -0.4642857, 5 0.5384615, 6 -0.25, 7 -0.8098246, 8 1, 9 1, 10 -0.8507463, 11 -1, 13 -0.816, 14 -0.46548} +{0 -1, 1 1, 2 -0.8998496, 3 -0.9821429, 5 0.5384615, 6 -0.25, 7 -0.9764912, 8 -1, 9 1, 10 -0.880597, 11 -1, 13 -0.84, 14 -0.99984} +{0 -1, 1 -1, 2 -0.9299248, 3 -0.9760714, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.84, 14 -0.99748} +{0 -1, 1 1, 2 -0.4234587, 3 -0.8214286, 5 -0.2307692, 6 -0.25, 7 -0.877193, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.28, 14 -1} +{0 1, 1 -1, 2 -0.8021053, 3 -0.2857143, 5 0.07692308, 6 0.75, 7 -0.9298246, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.95, 14 -0.9707} +{0 -1, 1 -1, 2 -0.7593985, 3 -0.875, 4 -1, 5 -0.3846154, 6 -0.5, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} +{0 1, 1 1, 2 -0.4159399, 3 -0.9257143, 5 0.6923077, 6 0.75, 7 -0.5438596, 8 1, 9 -1, 10 -1, 11 1, 13 -0.836, 14 -0.3743} +{0 -1, 1 -1, 2 -0.6517293, 3 -0.8510714, 5 0.07692308, 6 0.75, 7 -0.8070175, 8 1, 9 -1, 10 -1, 11 1, 13 -0.64, 14 -0.99998} +{0 1, 1 -1, 2 -0.6691729, 3 -0.7857143, 5 0.5384615, 6 0.75, 7 -0.8712281, 8 1, 9 1, 10 -0.4328358, 11 -1, 13 -1, 14 -0.99} +{0 1, 1 1, 2 -0.4863158, 3 -1, 5 0.2307692, 6 -0.25, 7 -0.9122807, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.798, 14 -1} +{0 -1, 1 1, 2 -0.7894737, 3 -0.6367857, 4 -1, 5 -0.3846154, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -0.99632} +{0 -1, 1 -1, 2 -0.2006014, 3 -0.4196429, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9884211, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.816, 14 -0.99964} +{0 -1, 1 1, 2 -0.5287218, 3 -0.9107143, 5 0.07692308, 6 0.75, 7 -0.9824561, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.6, 14 -0.99784} +{0 -1, 1 1, 2 -0.1828572, 3 -0.9642857, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.87, 14 -1} +{0 1, 1 -1, 2 -0.5263158, 3 -0.9671429, 5 -0.5384615, 6 -0.25, 7 -0.9621053, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.62, 14 -0.99} +{0 1, 1 1, 2 0.2231578, 3 -0.9642857, 4 -1, 5 -0.5384615, 6 0.75, 7 -0.7221053, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -0.99372} +{0 -1, 1 1, 2 -0.3909774, 3 -0.6071429, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.94, 14 -1} +{0 -1, 1 1, 2 -0.6616541, 3 -0.1428571, 5 -0.5384615, 6 -0.25, 7 -0.8421053, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.88, 14 -0.9999} +{0 -1, 1 -1, 2 -0.6141353, 3 -0.8185714, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -0.9988} +{0 1, 1 -1, 2 -0.4186466, 3 -0.6696429, 5 0.5384615, 6 0.75, 7 -0.8859649, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.4009023, 3 -0.8453571, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.88, 14 -1} +{0 -1, 1 1, 2 -0.3257143, 3 -0.6071429, 5 -0.6923077, 7 -0.6491228, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.79, 14 -0.98626} +{0 -1, 1 1, 2 -0.8270677, 3 -0.9792857, 5 -0.5384615, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99272} +{0 1, 1 1, 2 -0.6866165, 3 -0.9375, 5 0.5384615, 6 -0.25, 7 -0.6754386, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.48, 14 -0.96} +{0 1, 1 -1, 2 -0.4962406, 3 -0.5357143, 5 0.07692308, 7 -0.7192982, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -1, 14 -0.9387} +{0 -1, 1 1, 2 -0.8120301, 3 -0.5, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 1, 1 1, 2 -0.6517293, 3 -0.9585714, 5 0.07692308, 6 -0.25, 7 -0.9796491, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.904, 14 -0.89752} +{0 -1, 1 1, 2 -0.5239098, 3 -0.6607143, 5 -0.07692308, 6 -0.25, 7 -0.8596491, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.54, 14 -0.99864} +{0 -1, 1 1, 2 -0.115188, 3 -0.8392857, 5 -0.6923077, 7 -0.9473684, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.44, 14 -1} +{0 -1, 1 1, 2 -0.5488722, 3 -0.9167857, 5 -0.5384615, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.72, 14 -1} +{0 -1, 1 1, 2 -0.4640602, 3 -0.7857143, 4 -1, 5 -0.6923077, 7 -0.5087719, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99998} +{0 1, 1 1, 2 -0.8045113, 3 -0.2885714, 5 0.3846154, 6 -0.75, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 1, 1 1, 2 -0.06015038, 3 -0.3928571, 5 0.8461538, 6 0.75, 7 -0.01754386, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.912, 14 -0.96} +{0 1, 1 -1, 2 -0.7269173, 3 -0.8364286, 5 0.5384615, 6 0.75, 7 -0.8392982, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.86, 14 -0.95232} +{0 1, 1 -1, 2 -0.7918797, 3 -0.7857143, 5 0.5384615, 6 -0.25, 7 -0.9884211, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.9, 14 -0.99988} +{0 -1, 1 1, 2 -0.5765414, 3 -0.8928571, 5 0.2307692, 6 -0.25, 7 -0.8421053, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.9, 14 -0.99994} +{0 -1, 1 1, 2 -0.1828572, 3 -0.8392857, 4 -1, 5 1, 6 0.75, 7 -0.2982456, 8 1, 9 -1, 10 -1, 11 1, 13 -0.824, 14 -1} +{0 1, 1 1, 2 0.2833082, 3 1, 4 -1, 5 0.07692308, 6 -0.25, 7 1, 8 1, 9 1, 10 0.1940299, 11 -1, 13 -1, 14 -0.9997} +{0 1, 1 -1, 2 0.5136843, 3 -0.9882143, 5 -1, 6 -1, 7 -1, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.768, 14 -0.998} +{0 1, 1 -1, 2 -0.7392481, 3 -0.1964286, 4 -1, 5 1, 6 0.75, 7 -0.9473684, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -1, 14 -0.99358} +{0 -1, 1 -1, 2 -0.6818045, 3 -0.8214286, 4 -1, 5 -0.6923077, 7 -0.6842105, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.99088} +{0 -1, 1 -1, 2 0.6766917, 3 -0.5714286, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.3434586, 3 -0.9464286, 5 -0.5384615, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.769, 14 -1} +{0 1, 1 1, 2 0.04000006, 3 -0.1428571, 5 -0.07692308, 6 -0.25, 7 0.122807, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.89, 14 -1} +{0 1, 1 -1, 2 -0.5690226, 3 0.07142857, 4 -1, 5 0.3846154, 6 1, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.73576} +{0 1, 1 1, 2 -0.3557895, 3 -0.8214286, 5 -0.5384615, 6 -0.25, 7 -0.6842105, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -0.85, 14 -0.9746} +{0 1, 1 1, 2 0.07518797, 3 -0.4582143, 5 -0.6923077, 7 -0.4677193, 8 1, 9 1, 10 -0.5522388, 11 1, 13 -1, 14 -0.9} +{0 -1, 1 1, 2 1, 3 -0.6071429, 5 0.07692308, 6 -0.25, 7 -0.9621053, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9932} +{0 -1, 1 1, 2 -0.5338346, 3 -0.07142857, 5 -0.8461538, 6 0.75, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.772, 14 -1} +{0 -1, 1 -1, 2 -0.9046617, 3 -0.9642857, 5 -0.6923077, 6 -0.25, 7 -0.9884211, 8 -1, 9 1, 10 -0.8208955, 11 1, 13 -0.76, 14 -0.9993} +{0 -1, 1 -1, 2 -0.9323308, 3 -0.9882143, 5 -0.2307692, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.68, 14 -0.99998} +{0 1, 1 1, 2 0.3933835, 3 0.03571429, 5 -1, 6 -1, 7 0.2631579, 8 1, 9 1, 10 -0.5522388, 11 1, 13 -1, 14 -0.98} +{0 1, 1 1, 2 -0.5714286, 3 -0.8571429, 5 -0.5384615, 6 0.75, 7 -0.7077193, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.819, 14 -1} +{0 1, 1 1, 2 -0.1654135, 3 -0.89, 5 -0.6923077, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.784, 14 -1} +{0 -1, 1 1, 2 -0.6893233, 3 -0.3571429, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.6766917, 3 -0.0475, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -0.9905} +{0 1, 1 1, 2 -0.3684211, 3 0.07142857, 5 0.6923077, 6 0.5, 7 -0.622807, 8 1, 9 1, 10 -0.7313433, 11 1, 13 -1, 14 -0.99732} +{0 -1, 1 1, 2 -0.4009023, 3 -0.9107143, 5 0.2307692, 6 -0.25, 7 -0.9182456, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} +{0 1, 1 -1, 2 -0.1855638, 3 -0.2857143, 5 0.5384615, 6 0.75, 7 -0.877193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.971, 14 -0.98326} +{0 1, 1 1, 2 -0.7993985, 3 -0.8689286, 5 0.07692308, 6 -0.25, 7 -0.8421053, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.9, 14 -0.997} +{0 1, 1 1, 2 -0.2857143, 3 -0.9196429, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.569, 14 -1} +{0 1, 1 1, 2 0.04511278, 3 -0.6964286, 5 -0.07692308, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 1, 13 -0.775, 14 -1} +{0 -1, 1 1, 2 -0.7218045, 3 -0.9464286, 5 -0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.68, 14 -1} +{0 -1, 1 1, 2 -0.3609023, 3 -0.7589286, 5 0.07692308, 6 0.75, 7 -0.4182456, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.922406, 3 -0.8035714, 5 -0.2307692, 6 -0.25, 7 -0.9533333, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.92, 14 -0.99958} +{0 1, 1 1, 2 -0.7317293, 3 -0.25, 5 0.5384615, 6 0.75, 7 -0.9063158, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 -1, 2 -0.7593985, 3 -0.1607143, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -1} +{0 1, 1 -1, 2 -0.6592481, 3 -0.8185714, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 1, 13 -0.63, 14 -1} +{0 1, 1 1, 2 -0.3209022, 3 -0.8482143, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9940351, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.95, 14 -0.97626} +{0 -1, 1 -1, 2 -0.553985, 3 -0.7321429, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.96, 14 -0.99692} +{0 -1, 1 1, 2 -0.7467669, 3 -0.1339286, 5 0.07692308, 6 -0.25, 7 -0.7659649, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.82, 14 -0.99654} +{0 1, 1 1, 2 -0.3858647, 3 -0.89, 5 0.8461538, 6 -0.25, 7 -0.8919298, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.48} +{0 -1, 1 1, 2 -0.3609023, 3 -0.8214286, 5 -0.6923077, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.79, 14 -1} +{0 -1, 1 1, 2 -0.553985, 3 -0.7410714, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -1} +{0 -1, 1 -1, 2 -0.8369925, 3 -0.6132143, 5 -0.6923077, 6 0.75, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.99032} +{0 1, 1 1, 2 -0.7142857, 3 -0.9285714, 5 0.07692308, 6 -0.25, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.7, 14 -1} +{0 -1, 1 1, 2 -0.9172932, 3 -0.9910714, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.868, 14 -1} +{0 1, 1 -1, 2 -0.8096241, 3 -0.9910714, 5 0.5384615, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.76, 14 -0.98464} +{0 1, 1 1, 2 -0.7419549, 3 -0.2142857, 5 0.2307692, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.92, 14 -0.99444} +{0 -1, 1 1, 2 -0.3909774, 3 -0.6367857, 4 -1, 5 -0.6923077, 7 -0.9238596, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.52, 14 -1} +{0 -1, 1 -1, 2 0.303158, 3 -0.9760714, 5 -0.6923077, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 1, 13 -0.748, 14 -0.95606} +{0 -1, 1 1, 2 -0.924812, 3 -0.9403571, 5 -0.07692308, 6 -0.25, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.8, 14 -1} +{0 1, 1 1, 2 -0.4261654, 3 -0.8214286, 5 0.8461538, 6 0.75, 7 -0.8070175, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.84, 14 -0.95856} +{0 1, 1 1, 2 0.03759398, 3 0.7917856, 5 0.2307692, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.88, 14 -0.99972} +{0 -1, 1 1, 2 -0.3858647, 3 -0.8035714, 5 -0.6923077, 7 -0.8245614, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.768, 14 -0.996} +{0 -1, 1 1, 2 -0.8622556, 3 -0.9135714, 4 -1, 5 0.3846154, 6 -0.75, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 1, 2 -0.08270677, 3 -0.9642857, 5 -0.07692308, 6 -0.25, 7 -0.245614, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.6, 14 -1} +{0 -1, 1 1, 2 -0.2430076, 3 -0.875, 5 -0.5384615, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.7, 14 -0.99996} +{0 -1, 1 1, 2 -0.4637594, 3 -0.9464286, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.68, 14 -1} +{0 1, 1 1, 2 -0.6592481, 3 -0.8778571, 5 1, 6 -0.25, 7 -0.8831579, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.605, 14 -0.9996} +{0 1, 1 1, 2 0.5539849, 3 -0.2142857, 5 0.3846154, 6 1, 7 0.4035088, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.978, 14 -1} +{0 1, 1 1, 2 -0.1705263, 3 -1, 5 0.07692308, 7 0.05263158, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.4736842, 3 -0.9196429, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.904, 14 -0.99962} +{0 -1, 1 -1, 2 -0.3082707, 3 -0.6635714, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} +{0 -1, 1 1, 2 -0.4412029, 3 -0.4642857, 5 0.3846154, 7 -0.8887719, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.58, 14 -1} +{0 -1, 1 -1, 2 -0.4535338, 3 -0.7767857, 5 -1, 6 -1, 7 -0.7866667, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.8, 14 -0.99992} +{0 1, 1 1, 2 -0.6667669, 3 -0.8035714, 5 0.07692308, 6 -0.25, 7 -0.8421053, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.816, 14 -0.988} +{0 1, 1 1, 2 -0.7542857, 3 -0.9614286, 4 -1, 5 1, 6 -0.25, 7 -0.997193, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.16, 14 -0.99882} +{0 1, 1 1, 2 -0.3834586, 3 -0.7857143, 5 0.8461538, 6 0.75, 7 -0.4796491, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 0.1452632, 3 -0.7857143, 4 -1, 5 -1, 6 -1, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -0.99992} +{0 -1, 1 -1, 2 -0.4640602, 3 -0.8928571, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.8, 14 -0.9979} +{0 -1, 1 1, 2 -0.2580452, 3 -0.9496429, 5 0.07692308, 6 -0.25, 7 -0.9736842, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.775, 14 -0.99} +{0 1, 1 1, 2 -0.2354888, 3 -0.8778571, 5 1, 6 -0.25, 7 -0.9912281, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.52, 14 -1} +{0 -1, 1 1, 2 -0.8670677, 3 -0.8242857, 5 0.07692308, 6 0.5, 7 -0.9326316, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.84, 14 -0.98826} +{0 1, 1 1, 2 -0.2406015, 3 -0.6428571, 5 0.8461538, 6 -0.25, 7 -0.754386, 8 1, 9 1, 10 -0.7014925, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.8120301, 3 -0.2110714, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.864, 14 -1} +{0 -1, 1 1, 2 -0.4285714, 3 -0.8332143, 5 -0.8461538, 6 0.75, 7 -0.5964912, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.708, 14 -1} +{0 -1, 1 1, 2 -0.8547368, 3 -0.5921429, 5 -0.8461538, 6 -0.25, 7 -0.9621053, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} +{0 -1, 1 -1, 2 -0.9374436, 3 -0.4553571, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -1, 14 -0.9968} +{0 1, 1 1, 2 -0.2306766, 3 -0.5803571, 5 0.8461538, 6 0.75, 7 -0.2982456, 8 1, 9 1, 10 -0.5820896, 11 1, 13 -0.601, 14 -1} +{0 -1, 1 -1, 2 -0.8246617, 3 -0.9525, 5 0.2307692, 6 -0.25, 7 -0.8831579, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.78, 14 -0.9999} +{0 1, 1 1, 2 -0.7720301, 3 -0.25, 5 0.07692308, 6 -0.25, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.7317293, 3 -0.9464286, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.8, 14 -0.99212} +{0 -1, 1 1, 2 -0.6415038, 3 -0.7678571, 5 0.07692308, 6 0.75, 7 -0.8392982, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.584, 14 -0.99958} +{0 -1, 1 1, 2 -0.7795489, 3 -0.2796429, 4 -1, 5 0.3846154, 6 0.75, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -1} +{0 -1, 1 -1, 2 0.06015038, 3 -0.8928571, 5 -0.3846154, 6 -0.5, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.99946} +{0 -1, 1 1, 2 -0.7918797, 3 -0.6221429, 5 0.5384615, 6 -0.25, 7 -0.9736842, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.84, 14 -1} +{0 1, 1 -1, 2 -0.8219549, 3 -0.985, 5 0.5384615, 6 0.75, 7 -0.9796491, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -0.92, 14 -0.99802} +{0 1, 1 1, 2 -0.7569925, 3 -0.9821429, 5 -0.8461538, 6 0.75, 7 -0.9533333, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.6066165, 3 -0.9614286, 5 -0.5384615, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 -1, 2 -0.253233, 3 -0.6428571, 5 0.8461538, 6 -0.25, 7 -0.05263158, 8 1, 9 -1, 10 -1, 11 1, 13 -0.02, 14 -1} +{0 1, 1 -1, 2 0.09263164, 3 -0.1042857, 5 -0.2307692, 6 -0.25, 7 -0.8392982, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.844, 14 -1} +{0 -1, 1 -1, 2 -0.9398496, 3 -0.9732143, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.99964} +{0 1, 1 -1, 2 -0.6766917, 3 -0.08928571, 5 0.07692308, 7 -0.6666667, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.927, 14 -0.99112} +{0 1, 1 1, 2 -0.7819549, 3 -0.6578571, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.8421053, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.92, 14 -0.994} +{0 1, 1 1, 2 -0.7494737, 3 -0.2142857, 5 0.8461538, 6 -0.25, 7 -0.9533333, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 1, 1 1, 2 0.22797, 3 -0.3275, 5 -1, 6 -1, 7 0.01157895, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.97, 14 -0.994} +{0 1, 1 1, 2 -0.8697744, 3 -0.6071429, 5 -0.5384615, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -1} +{0 1, 1 1, 2 -0.3106768, 3 -0.6846429, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9824561, 8 1, 9 1, 10 -0.7014925, 11 1, 13 -0.68, 14 -1} +{0 1, 1 1, 2 -0.265564, 3 -0.2767857, 5 1, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.48, 14 -0.99608} +{0 -1, 1 1, 2 -0.7569925, 3 -0.89, 5 -0.5384615, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.644, 14 -1} +{0 -1, 1 -1, 2 0.1479699, 3 -0.5357143, 5 -0.6923077, 7 -0.7835088, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.927, 14 -1} +{0 -1, 1 1, 2 -0.7467669, 3 -0.8392857, 5 -0.6923077, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.9998} +{0 -1, 1 1, 2 0.1630075, 3 -0.8928571, 5 -0.8461538, 6 -0.25, 7 -0.7368421, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.993} +{0 1, 1 -1, 2 0.4186466, 3 -0.6428571, 5 -0.2307692, 6 -0.25, 7 -0.7192982, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -1, 14 -0.99802} +{0 1, 1 1, 2 -0.8069173, 3 -0.5982143, 5 0.2307692, 6 -0.25, 7 -0.88, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.88, 14 -1} +{0 1, 1 1, 2 -0.7142857, 3 -0.7142857, 5 0.07692308, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} +{0 -1, 1 1, 2 -0.3257143, 3 -0.97, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.691, 14 -0.99996} +{0 -1, 1 -1, 2 -0.1428571, 3 -0.875, 4 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.85, 14 -0.99998} +{0 -1, 1 1, 2 -0.7043609, 3 -0.9403571, 5 -0.6923077, 6 0.75, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.78, 14 -0.9999} +{0 1, 1 -1, 2 -0.3308271, 3 -0.9285714, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.99088} +{0 -1, 1 1, 2 -0.2231578, 3 -0.6428571, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.983, 14 -0.99998} +{0 1, 1 -1, 2 -0.847218, 3 -0.6846429, 4 -1, 5 0.07692308, 6 0.75, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -1} +{0 -1, 1 1, 2 -0.593985, 3 -0.9553571, 5 -0.2307692, 6 -0.25, 7 -0.9680702, 8 1, 9 -1, 10 -1, 11 1, 13 -0.8, 14 -1} +{0 -1, 1 1, 2 -0.4384963, 3 -0.7857143, 5 -0.8461538, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -1} +{0 -1, 1 1, 2 -0.8294737, 3 -0.8928571, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.8596491, 8 1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.9996} +{0 1, 1 -1, 2 -0.7344361, 3 -0.2321429, 5 0.5384615, 6 -0.25, 7 -0.9708772, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -1, 14 -0.9888} +{0 1, 1 1, 2 -0.2129324, 3 -0.5564286, 5 0.5384615, 6 -0.25, 7 -0.997193, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.8, 14 -0.994} +{0 1, 1 1, 2 -0.7317293, 3 -0.9882143, 5 0.07692308, 6 -0.5, 7 -0.8421053, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -1, 14 -1} +{0 1, 1 -1, 2 -0.7091729, 3 -0.9435714, 4 -1, 5 0.5384615, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.92, 14 -0.992} +{0 1, 1 -1, 2 -0.5112782, 3 -0.6221429, 5 0.3846154, 6 -0.75, 7 -0.8421053, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.901, 14 -0.99} +{0 1, 1 -1, 2 -0.2006014, 3 -0.4614286, 4 -1, 5 0.5384615, 6 0.75, 7 -0.4385965, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -1, 14 -0.954} +{0 1, 1 -1, 2 -0.3082707, 3 -0.6339286, 5 0.3846154, 6 -0.25, 7 -0.6491228, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.92} +{0 -1, 1 1, 2 -0.481203, 3 -0.8510714, 5 0.07692308, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.7, 14 -1} +{0 1, 1 -1, 2 -0.6565414, 3 -0.7946429, 5 1, 6 0.75, 7 -0.9385965, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.64, 14 -1} +{0 -1, 1 1, 2 -0.5888722, 3 -0.1071429, 5 -0.2307692, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.28, 14 -1} +{0 1, 1 1, 2 -0.4640602, 3 -0.7142857, 5 1, 6 -0.25, 7 -0.6491228, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.71, 14 -0.95442} +{0 -1, 1 1, 2 -0.3885714, 3 -0.5357143, 5 -0.2307692, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 1, 13 -0.557, 14 -1} +{0 -1, 1 1, 2 -0.7494737, 3 -0.8332143, 5 -0.5384615, 6 -0.25, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} +{0 -1, 1 1, 2 -0.478797, 3 -0.7796429, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.84, 14 -0.99918} +{0 -1, 1 1, 2 -0.4640602, 3 -0.9642857, 5 0.07692308, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.68, 14 -1} +{0 -1, 1 1, 2 -0.9323308, 3 -0.7767857, 5 0.2307692, 6 -0.25, 7 -0.9940351, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.99988} +{0 1, 1 1, 2 -0.593985, 3 -0.8810714, 5 0.8461538, 6 0.75, 7 -0.6431579, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.601, 14 -0.98346} +{0 -1, 1 1, 2 -0.6565414, 3 -0.7857143, 5 0.07692308, 6 -0.25, 7 -0.9122807, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.99956} +{0 1, 1 1, 2 0.6240602, 3 -0.6071429, 5 0.3846154, 6 1, 7 -0.0877193, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -1, 14 -1} +{0 1, 1 -1, 2 -0.847218, 3 -0.3214286, 5 0.2307692, 6 -0.25, 7 -0.8859649, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.96, 14 -0.988} +{0 -1, 1 -1, 2 -0.593985, 3 -0.9792857, 5 -0.07692308, 6 0.75, 7 -0.9912281, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.728, 14 -0.99784} +{0 -1, 1 -1, 2 -0.8246617, 3 -0.9525, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 1, 14 -0.99996} +{0 -1, 1 1, 2 -0.4887218, 3 -0.8867857, 5 -0.8461538, 6 -0.25, 7 -0.9589474, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 0.09774436, 3 -0.9403571, 5 -0.2307692, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.76, 14 -0.99766} +{0 -1, 1 1, 2 -0.478797, 3 -0.8928571, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.84, 14 -1} +{0 1, 1 1, 2 0.1377444, 3 0.07142857, 5 0.07692308, 6 -0.25, 7 -0.4035088, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.3133834, 3 -0.9792857, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.7014925, 11 -1, 13 -0.8, 14 -0.99964} +{0 1, 1 1, 2 -0.403609, 3 -0.8035714, 5 -0.07692308, 6 -0.25, 7 -0.7017544, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.796, 14 -1} +{0 1, 1 -1, 2 -0.7870677, 3 -0.7857143, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 1, 2 -0.3257143, 3 0.2946429, 5 0.2307692, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.68, 14 -0.92896} +{0 -1, 1 1, 2 0.112782, 3 -0.9582143, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.855, 14 -1} +{0 -1, 1 -1, 2 -0.7043609, 3 -0.9407143, 5 0.5384615, 6 -0.25, 7 -0.9708772, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.8, 14 -0.99978} +{0 1, 1 1, 2 -0.3557895, 3 -0.6785714, 5 1, 6 0.75, 7 -0.5964912, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.289, 14 -1} +{0 1, 1 -1, 2 0.3434586, 3 0.5, 5 -0.6923077, 7 -0.2982456, 8 1, 9 1, 10 -0.6119403, 11 -1, 13 -1, 14 -0.866} +{0 1, 1 1, 2 -0.5639098, 3 -0.9375, 5 -0.07692308, 6 -0.25, 7 -0.9326316, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.604, 14 -1} +{0 -1, 1 1, 2 -0.4640602, 3 -0.9553571, 5 -0.5384615, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.62, 14 -0.9598} +{0 -1, 1 -1, 2 -0.4586466, 3 -0.7857143, 4 -1, 5 -0.3846154, 6 -0.5, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.9996} +{0 1, 1 1, 2 -0.8294737, 3 -0.5357143, 5 0.2307692, 6 0.75, 7 -0.8975439, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -0.92, 14 -0.94092} +{0 1, 1 1, 2 -0.2381954, 3 -0.5714286, 5 -0.07692308, 6 -0.25, 7 -0.9094737, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.892, 14 -0.97806} +{0 -1, 1 1, 2 -0.8998496, 3 -0.765, 5 -0.6923077, 6 -0.25, 7 -0.9764912, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.86, 14 -0.99996} +{0 -1, 1 1, 2 -0.0652631, 3 -0.5, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8859649, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.99996} +{0 -1, 1 1, 2 -0.924812, 3 -1, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.94, 14 -1} +{0 1, 1 -1, 2 -0.1753384, 3 -0.5357143, 5 0.5384615, 6 -0.25, 7 -0.9649123, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.855, 14 -1} +{0 1, 1 1, 2 -0.5437594, 3 0.07142857, 5 0.07692308, 6 0.75, 7 -0.625614, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.95434} +{0 -1, 1 -1, 2 -0.6264662, 3 -0.8571429, 5 -0.3846154, 6 -0.5, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.724, 14 -0.99998} +{0 1, 1 1, 2 -0.253233, 3 -0.7617857, 5 0.2307692, 6 -0.25, 7 -0.7192982, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -0.617, 14 -0.97312} +{0 1, 1 1, 2 -0.6565414, 3 -0.5714286, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -1, 14 -1} +{0 1, 1 -1, 2 -0.5663158, 3 -0.9732143, 5 0.5384615, 6 -0.25, 7 -0.9589474, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.92, 14 -1} +{0 1, 1 1, 2 0.7945864, 3 0.2678571, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.7368421, 3 -0.1785714, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.92} +{0 -1, 1 -1, 2 -0.596391, 3 -0.9107143, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.908, 14 -0.994} +{0 1, 1 -1, 2 -0.8369925, 3 -0.3867857, 5 0.8461538, 6 0.75, 7 -0.9473684, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -0.904, 14 -1} +{0 1, 1 -1, 2 -0.6442105, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} +{0 -1, 1 1, 2 -0.4640602, 3 -0.9971429, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.7017544, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.54, 14 -1} +{0 -1, 1 -1, 2 -0.7368421, 3 -0.3928571, 5 0.5384615, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.7014925, 11 -1, 13 -0.92, 14 -0.9802} +{0 -1, 1 -1, 2 -0.7242105, 3 -0.9107143, 5 0.5384615, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -0.98382} +{0 -1, 1 1, 2 -0.7142857, 3 -0.09821429, 5 0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -0.88896} +{0 -1, 1 -1, 2 -0.5263158, 3 -0.9225, 4 -1, 5 1, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99974} +{0 -1, 1 -1, 2 -0.4511278, 3 -0.5714286, 5 -0.8461538, 6 -0.25, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.728, 14 -1} +{0 1, 1 1, 2 -0.6015038, 3 -0.8928571, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9736842, 8 1, 9 -1, 10 -1, 11 1, 13 -0.74, 14 -0.9787} +{0 -1, 1 1, 2 -0.8321805, 3 -0.2203571, 5 0.07692308, 7 -0.9589474, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.8, 14 -0.99986} +{0 -1, 1 1, 2 -0.3383459, 3 -0.8275, 5 0.2307692, 6 -0.25, 7 -0.9912281, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.78, 14 -0.99998} +{0 -1, 1 1, 2 -0.847218, 3 -1, 5 0.5384615, 6 -0.25, 7 -0.9533333, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.99998} +{0 1, 1 -1, 2 -0.5488722, 3 -0.7321429, 5 0.07692308, 6 -0.25, 7 -0.9238596, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.629, 14 -1} +{0 1, 1 1, 2 -0.3783459, 3 -0.6964286, 5 -0.6923077, 7 -0.7719298, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.726, 14 -0.9878} +{0 -1, 1 -1, 2 -0.4135338, 3 -0.7857143, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.8596491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} +{0 1, 1 1, 2 0.2081202, 3 -0.3125, 5 0.3846154, 6 -0.25, 7 -0.3919298, 8 1, 9 1, 10 -0.8507463, 11 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.6541353, 3 -0.9285714, 5 -0.2307692, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -1} +{0 -1, 1 1, 2 -0.4384963, 3 -0.8453571, 4 -1, 5 -0.5384615, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} +{0 -1, 1 -1, 2 -0.7795489, 3 -0.6428571, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 1, 1 -1, 2 0.2857143, 3 0.1428571, 5 -0.3846154, 6 -1, 7 -1, 8 1, 9 1, 10 -0.5522388, 11 -1, 13 -1, 14 -0.99506} +{0 1, 1 1, 2 -0.443609, 3 -0.9882143, 4 -1, 5 0.07692308, 6 0.75, 7 -0.7719298, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.568, 14 -0.84} +{0 1, 1 -1, 2 -0.7969925, 3 -0.1546429, 5 0.07692308, 6 0.75, 7 -0.5789474, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.66, 14 -1} +{0 -1, 1 -1, 2 -0.5037594, 3 -0.6071429, 5 -0.5384615, 6 -0.25, 7 -0.6140351, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.9, 14 -1} +{0 -1, 1 -1, 2 -0.6742857, 3 -0.9521429, 5 -0.2307692, 6 0.75, 7 -0.877193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.6, 14 -1} +{0 1, 1 1, 2 -0.7166917, 3 -0.2053571, 5 1, 6 0.75, 7 -0.9677193, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 -1, 2 -0.4640602, 3 -0.1964286, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.816, 14 -0.896} +{0 1, 1 -1, 2 -0.4412029, 3 -0.9614286, 5 0.8461538, 6 -0.25, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.56, 14 -0.77646} +{0 1, 1 1, 2 -0.6941353, 3 -0.8928571, 5 -0.8461538, 6 0.75, 7 -0.8684211, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.8, 14 -0.99346} +{0 1, 1 1, 2 -0.3082707, 3 -0.9910714, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.768, 14 -0.99774} +{0 -1, 1 1, 2 -0.516391, 3 -0.9107143, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.776, 14 -1} +{0 1, 1 -1, 2 -0.6893233, 3 -0.9642857, 5 0.5384615, 6 0.75, 7 -0.9122807, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.98644} +{0 -1, 1 1, 2 -0.7768421, 3 -0.9821429, 4 -1, 5 0.07692308, 6 0.75, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99592} +{0 -1, 1 1, 2 -0.4685714, 3 0.1071429, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} +{0 1, 1 1, 2 -0.7269173, 3 -0.7857143, 5 -0.07692308, 6 -0.25, 7 -0.9094737, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.74, 14 -0.984} +{0 -1, 1 1, 2 -0.2857143, 3 -0.875, 4 -1, 5 0.07692308, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 1, 13 -0.836, 14 -0.992} +{0 -1, 1 -1, 2 -0.6667669, 3 -0.6785714, 5 0.2307692, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.64, 14 -0.99988} +{0 -1, 1 1, 2 -0.3209022, 3 -0.7292857, 5 0.2307692, 6 -0.25, 7 -0.9182456, 8 1, 9 -1, 10 -1, 11 1, 13 -0.8, 14 -1} +{0 1, 1 -1, 2 0.007518797, 3 -0.9464286, 5 0.5384615, 6 0.75, 7 -0.8070175, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.667, 14 -0.98216} +{0 -1, 1 1, 2 -0.4487217, 3 -0.7142857, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -1} +{0 -1, 1 -1, 2 -0.4938346, 3 -0.2382143, 5 0.5384615, 6 0.75, 7 -0.9940351, 8 -1, 9 1, 10 -0.641791, 11 1, 13 -0.871, 14 -0.99994} +{0 1, 1 1, 2 -0.5765414, 3 -0.89, 5 0.2307692, 6 -0.25, 7 -0.7368421, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.9, 14 -0.99994} +{0 -1, 1 1, 2 0.2354888, 3 0.1071429, 5 0.3846154, 6 1, 7 -1, 8 1, 9 1, 10 -0.4029851, 11 -1, 13 -0.848, 14 -0.9974} +{0 1, 1 1, 2 -0.9299248, 3 -0.9464286, 5 0.07692308, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.648, 14 -0.9862} +{0 -1, 1 1, 2 -0.6742857, 3 -0.1071429, 5 0.2307692, 6 -0.25, 7 -0.9385965, 8 1, 9 -1, 10 -1, 11 1, 13 -0.74, 14 -1} +{0 1, 1 1, 2 -0.4309775, 3 -0.6071429, 5 0.5384615, 6 0.75, 7 -0.6140351, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.592, 14 -0.98} +{0 1, 1 1, 2 -0.5061654, 3 -0.9642857, 5 0.07692308, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -0.968, 14 -0.9892} +{0 -1, 1 1, 2 -0.7443609, 3 -0.9671429, 5 -0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -0.9989} +{0 1, 1 1, 2 -0.1578947, 3 -0.9314286, 5 1, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.49, 14 -0.988} +{0 -1, 1 1, 2 -0.3106768, 3 -0.8571429, 5 -0.6923077, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.779, 14 -1} +{0 -1, 1 1, 2 -0.6366917, 3 -0.08321429, 5 0.8461538, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99996} +{0 1, 1 1, 2 -0.5136842, 3 -0.8689286, 5 0.07692308, 6 0.75, 7 -0.6957895, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -0.996} +{0 -1, 1 1, 2 -0.8096241, 3 -0.9821429, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -1} +{0 1, 1 1, 2 -0.8219549, 3 -0.9732143, 5 0.5384615, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.92, 14 -1} +{0 1, 1 1, 2 0.1329323, 3 -0.9971429, 5 1, 6 0.75, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.94} +{0 -1, 1 1, 2 0.4736842, 3 -0.5, 5 0.3846154, 6 1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99976} +{0 -1, 1 1, 2 -0.1930826, 3 -0.765, 5 -0.07692308, 6 -0.25, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.6, 14 -1} +{0 -1, 1 -1, 2 -0.922406, 3 -0.985, 5 -0.2307692, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.99998} +{0 -1, 1 1, 2 -0.5263158, 3 -0.9585714, 5 0.2307692, 6 -0.25, 7 -0.9796491, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.66, 14 -0.94394} +{0 -1, 1 1, 2 -0.3909774, 3 -0.6785714, 5 -0.2307692, 6 -0.25, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 1, 13 -0.76, 14 -1} +{0 1, 1 -1, 2 0.7392482, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} +{0 1, 1 1, 2 -0.1503759, 3 -0.9853571, 5 -0.6923077, 6 0.75, 7 -0.6403509, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.6, 14 -1} +{0 -1, 1 -1, 2 -0.7368421, 3 -0.2142857, 4 -1, 5 0.5384615, 6 -0.25, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 1, 13 -0.732, 14 -1} +{0 -1, 1 1, 2 -0.6790977, 3 -0.8571429, 5 0.3846154, 6 -0.75, 7 -0.9884211, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.68, 14 -0.974} +{0 1, 1 1, 2 -0.08030069, 3 -0.9642857, 5 -0.6923077, 6 0.75, 7 -0.6491228, 8 1, 9 -1, 10 -1, 11 1, 13 -0.68, 14 -1} +{0 1, 1 -1, 2 -0.7218045, 3 -0.1607143, 5 1, 6 0.75, 7 -0.9649123, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.7, 14 -0.98898} +{0 -1, 1 1, 2 -0.3783459, 3 -0.9046429, 5 -0.6923077, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.56, 14 -0.91} +{0 1, 1 1, 2 -0.7193985, 3 -0.1785714, 5 -0.6923077, 6 -0.25, 7 -0.754386, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.944, 14 -0.98516} +{0 -1, 1 1, 2 -0.633985, 3 -0.9375, 5 -0.5384615, 6 -0.25, 7 -0.9736842, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.826, 14 -0.99994} +{0 1, 1 -1, 2 -0.884812, 3 -0.3571429, 5 -0.2307692, 6 -0.25, 7 -0.9035088, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.7993985, 3 -0.9225, 5 0.5384615, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.892, 14 -0.99986} +{0 1, 1 1, 2 -0.4610526, 3 0.1546429, 5 -0.8461538, 6 -0.25, 7 -0.7894737, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.75, 14 -0.9854} +{0 -1, 1 -1, 2 0.3181955, 3 -0.8571429, 5 -1, 6 -1, 7 -0.5438596, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.9998} +{0 1, 1 1, 2 0.3810526, 3 -0.89, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 1, 13 -0.74, 14 -1} +{0 1, 1 -1, 2 0.5464661, 5 -1, 6 -1, 7 -1, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -1, 14 -0.972} +{0 -1, 1 1, 2 -0.5088722, 3 -0.9257143, 4 -1, 5 -0.6923077, 7 -0.9649123, 8 1, 9 1, 10 -0.7014925, 11 1, 13 -0.868, 14 -0.99944} +{0 1, 1 1, 2 0.04751886, 3 -0.5357143, 5 0.5384615, 6 0.75, 7 -0.5789474, 8 1, 9 -1, 10 -1, 11 1, 13 -0.65, 14 -1} +{0 -1, 1 -1, 2 -0.7043609, 3 -0.1785714, 4 -1, 5 -0.5384615, 6 0.75, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.98, 14 -0.99968} +{0 1, 1 1, 2 -0.8069173, 3 -0.3392857, 5 0.07692308, 6 -0.25, 7 -0.8831579, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.96, 14 -0.99944} +{0 1, 1 1, 2 0.03518791, 3 -0.4553571, 5 0.2307692, 6 0.75, 7 0.0877193, 8 1, 9 1, 10 -0.641791, 11 -1, 13 -1, 14 -0.9842} +{0 1, 1 1, 2 -0.7142857, 3 -0.8928571, 5 0.5384615, 6 -0.25, 7 -0.8333333, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -1, 14 -0.98836} +{0 -1, 1 1, 2 -0.443609, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.84, 14 -0.99998} +{0 -1, 1 1, 2 -0.403609, 3 -0.9760714, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} +{0 -1, 1 1, 2 -0.7043609, 3 -0.9671429, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.8157895, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.792, 14 -0.99306} +{0 -1, 1 1, 2 -0.9046617, 3 -0.9760714, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.8, 14 -1} +{0 -1, 1 -1, 2 -0.7870677, 3 -0.3928571, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99298} +{0 1, 1 -1, 2 0.4084211, 3 0.1785714, 5 0.5384615, 6 -0.25, 7 -0.2280702, 8 1, 9 -1, 10 -1, 11 1, 13 -0.979, 14 -0.78878} +{0 -1, 1 1, 2 -0.4640602, 3 -0.6428571, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.4035088, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 1, 1 -1, 2 -0.6616541, 3 -0.1192857, 5 0.8461538, 6 0.75, 7 -0.754386, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.6, 14 -0.99084} +{0 -1, 1 1, 2 -0.7669173, 3 -0.3035714, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -1} +{0 -1, 1 1, 2 -0.7993985, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} +{0 -1, 1 -1, 2 -0.6541353, 3 -0.03571429, 4 -1, 5 -1, 6 -1, 7 -0.8596491, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.8, 14 -0.99998} +{0 1, 1 1, 2 -0.1254135, 3 -0.6696429, 5 0.5384615, 6 -0.25, 7 -0.6785965, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -1, 14 -1} +{0 1, 1 1, 2 -0.6114286, 3 -0.875, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.84, 14 -0.88446} +{0 1, 1 1, 2 0.3257143, 3 -0.4971429, 5 -0.07692308, 6 -0.25, 7 -0.01754386, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.64, 14 -0.97336} +{0 1, 1 1, 2 0.2682706, 3 -0.1785714, 5 -1, 6 -1, 7 -0.6491228, 8 1, 9 1, 10 -0.8507463, 11 -1, 13 -1, 14 -0.82298} +{0 1, 1 1, 2 0.1302256, 3 -0.2857143, 5 -0.6923077, 7 -1, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.97502} +{0 -1, 1 1, 2 -0.215639, 3 -0.9642857, 5 -0.07692308, 6 -0.25, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.712, 14 -1} +{0 1, 1 1, 2 -0.5840602, 3 -0.8542857, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.63, 14 -0.9888} +{0 1, 1 1, 2 -0.5061654, 3 -0.5357143, 5 0.8461538, 6 -0.25, 7 -0.7807018, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -0.67, 14 -0.976} +{0 -1, 1 1, 2 0.1452632, 3 -0.8542857, 4 -1, 5 -1, 6 -1, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.99998} +{0 -1, 1 -1, 2 -0.6616541, 3 -0.2142857, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.6842105, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} +{0 -1, 1 1, 2 -0.521203, 3 -0.9464286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -1} +{0 1, 1 -1, 2 -0.4009023, 3 -0.9732143, 5 0.8461538, 6 -0.25, 7 -0.9736842, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.7, 14 -0.99912} +{0 1, 1 1, 2 -0.6390977, 3 -0.9464286, 5 0.07692308, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.651, 14 -0.99954} +{0 1, 1 -1, 2 -0.5512782, 3 -0.9257143, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.7, 14 -0.9714} +{0 1, 1 -1, 2 -0.8697744, 3 -0.9732143, 4 1, 5 0.8461538, 6 -1, 7 -0.2982456, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.7, 14 -1} +{0 1, 1 1, 2 -0.7993985, 3 -0.5, 5 0.07692308, 6 -0.25, 7 -0.8859649, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.8, 14 -0.97218} +{0 1, 1 1, 2 -0.887218, 3 0.5714286, 4 1, 5 -1, 6 0.5, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 12 1, 13 -0.55, 14 1} +{0 -1, 1 1, 2 -0.8697744, 3 -0.5178571, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -1} +{0 1, 1 1, 2 0.02015032, 3 -0.8214286, 5 -0.07692308, 7 -0.8245614, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.59, 14 -0.9498} +{0 1, 1 1, 2 0.3133834, 3 -0.3928571, 5 0.3846154, 6 0.75, 7 -0.5087719, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -1, 14 -1} +{0 1, 1 1, 2 -1, 3 -0.7142857, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.88, 14 -0.98} +{0 1, 1 1, 2 -0.8321805, 3 -0.3214286, 5 0.5384615, 6 -0.25, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 1, 13 -0.94, 14 -0.992} +{0 -1, 1 -1, 2 -0.7542857, 3 -0.1667857, 5 -0.5384615, 6 0.75, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.68, 14 -0.9999} +{0 -1, 1 1, 2 -0.884812, 3 -0.2857143, 5 0.2307692, 6 0.75, 7 -0.9884211, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.88, 14 -0.99998} +{0 -1, 1 1, 2 -0.366015, 3 -0.8214286, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.8, 14 -1} +{0 -1, 1 1, 2 -0.5362406, 3 -0.75, 5 0.2307692, 6 -0.25, 7 -0.754386, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.671, 14 -1} +{0 -1, 1 1, 2 -0.7693233, 3 -0.9464286, 4 -1, 5 0.6923077, 6 0.5, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.868, 14 -0.99996} +{0 -1, 1 1, 2 -0.8670677, 3 -0.2678571, 5 0.07692308, 6 0.75, 7 -0.9238596, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.68, 14 -0.99974} +{0 -1, 1 1, 2 -0.5714286, 3 -0.7857143, 5 0.2307692, 6 -0.25, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.7, 14 -0.99866} +{0 1, 1 -1, 2 -0.03518791, 3 -0.25, 5 0.5384615, 6 -0.25, 7 -0.6491228, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.7293233, 3 -0.1785714, 5 -0.6923077, 6 -0.25, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.4640602, 3 -0.75, 5 -0.8461538, 6 -0.25, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 1, 13 -0.7, 14 -1} +{0 1, 1 -1, 2 -0.7993985, 3 -0.4642857, 5 -0.5384615, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.84, 14 -0.99532} +{0 1, 1 -1, 2 -0.7744361, 3 -0.8332143, 5 -0.6923077, 7 -0.9649123, 8 1, 9 1, 10 -0.880597, 11 -1, 12 -1, 13 -0.92, 14 -1} +{0 1, 1 1, 2 -0.6114286, 3 -0.6964286, 5 0.8461538, 6 -0.25, 7 -0.6989474, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.88, 14 -1} +{0 -1, 1 -1, 2 -0.5915789, 3 -0.8810714, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.66, 14 -0.99998} +{0 1, 1 1, 2 -0.1479699, 3 -0.9257143, 5 0.2307692, 6 -0.25, 7 -0.6491228, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.5, 14 -0.8} +{0 -1, 1 -1, 2 -0.8646617, 3 -0.2857143, 5 0.2307692, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.88, 14 -0.99998} +{0 -1, 1 -1, 2 -0.556391, 3 -0.9285714, 5 0.5384615, 6 -0.25, 7 -0.9298246, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.833, 14 -0.99} +{0 1, 1 -1, 2 -0.7669173, 3 -0.5714286, 5 -0.2307692, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.92, 14 -0.98164} +{0 1, 1 1, 2 -0.7569925, 3 -0.2142857, 5 1, 6 -0.25, 7 -0.9796491, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.879, 14 -1} +{0 -1, 1 1, 2 -0.7542857, 3 -0.9642857, 5 0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.64, 14 -1} +{0 1, 1 1, 2 -0.4309775, 3 -0.3571429, 4 -1, 5 0.2307692, 6 0.75, 7 -0.6315789, 8 1, 9 -1, 10 -1, 11 1, 13 -0.846, 14 -1} +{0 -1, 1 -1, 2 -0.0502255, 3 -0.9285714, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.737, 14 -1} +{0 -1, 1 -1, 2 -0.7043609, 3 -0.9582143, 4 -1, 5 -1, 6 -1, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.99826} +{0 -1, 1 -1, 2 -0.8745865, 3 -0.9614286, 5 0.07692308, 6 -0.25, 7 -0.877193, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.92, 14 -0.9999} +{0 -1, 1 1, 2 -0.4210526, 3 -0.8214286, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.5087719, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} +{0 -1, 1 -1, 2 -0.7317293, 3 -0.9760714, 5 0.5384615, 6 -0.25, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.84, 14 -1} +{0 -1, 1 1, 2 -0.3708271, 3 -0.9228571, 5 -0.07692308, 6 -0.25, 7 -0.9182456, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.972, 14 -1} +{0 1, 1 1, 2 -0.521203, 3 -0.8989286, 5 0.2307692, 6 0.75, 7 -0.9473684, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.76, 14 -0.998} +{0 -1, 1 1, 2 -0.4562406, 3 -0.8214286, 5 -0.2307692, 6 -0.25, 7 -0.4736842, 8 1, 9 -1, 10 -1, 11 1, 13 -0.477, 14 -1} +{0 1, 1 -1, 2 -0.7918797, 3 -0.8689286, 5 0.5384615, 6 -0.25, 7 -0.8536842, 8 1, 9 1, 10 -0.8507463, 11 -1, 13 -0.78, 14 -0.94994} +{0 -1, 1 1, 2 -0.3984962, 3 -0.8035714, 5 -0.6923077, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} +{0 1, 1 1, 2 -0.7494737, 3 -0.9407143, 5 0.07692308, 6 0.75, 7 -0.8480702, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.872, 14 -1} +{0 1, 1 -1, 2 -0.3482707, 3 -0.1428571, 5 0.5384615, 6 0.75, 7 -0.01754386, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -1, 14 -0.8682} +{0 1, 1 1, 2 -0.4535338, 3 -0.6814286, 5 0.8461538, 6 0.75, 7 -0.5761404, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.689, 14 -0.994} +{0 -1, 1 -1, 2 -0.7317293, 3 -0.9435714, 5 -0.6923077, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.856, 14 -1} +{0 -1, 1 1, 2 -0.6114286, 3 0.04178571, 5 -0.6923077, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.822, 14 -1} +{0 1, 1 1, 2 -0.09022556, 3 -0.8571429, 5 -0.07692308, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -1, 14 -0.9997} +{0 -1, 1 1, 2 -0.5061654, 3 -0.9225, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.83, 14 -0.99642} +{0 -1, 1 1, 2 -0.2781955, 3 -0.5, 5 0.5384615, 6 0.75, 7 -0.1929825, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.7, 14 -0.9999} +{0 -1, 1 1, 2 -0.8998496, 3 -0.9939286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -0.98556} +{0 -1, 1 1, 2 0.0652631, 3 -0.8364286, 5 -1, 6 -1, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.99994} +{0 -1, 1 1, 2 -0.7242105, 3 -0.9878571, 5 -0.07692308, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.366015, 3 -0.9107143, 4 -1, 5 -0.6923077, 6 0.75, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} +{0 -1, 1 1, 2 -0.08270677, 3 -0.2142857, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.8947368, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -1, 14 -1} +{0 1, 1 1, 2 0.3759398, 3 -0.8035714, 5 0.2307692, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.94, 14 -0.99884} +{0 1, 1 1, 2 -0.6466165, 3 -0.9732143, 5 -0.07692308, 6 -0.25, 7 -0.9824561, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.74, 14 -0.69784} +{0 -1, 1 -1, 2 -0.1630075, 3 -0.9257143, 5 -0.2307692, 6 -0.25, 7 -0.9533333, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -0.99526} +{0 -1, 1 1, 2 0.07759405, 3 0.3571429, 5 -1, 6 -1, 7 -1, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.906, 14 -1} +{0 -1, 1 -1, 2 -0.3933835, 3 -0.8867857, 4 -1, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.68, 14 -1} +{0 -1, 1 1, 2 -0.8369925, 3 -0.7142857, 4 -1, 5 -0.6923077, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.64, 14 -0.98} +{0 -1, 1 -1, 2 -0.6766917, 3 -0.8275, 4 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} +{0 1, 1 1, 2 -0.7118797, 3 -0.8928571, 5 0.07692308, 6 0.75, 7 -0.9007018, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.578, 14 -0.996} +{0 -1, 1 1, 2 0.6667669, 3 -0.3571429, 5 -1, 6 -1, 7 -0.7192982, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.93, 14 -0.99988} +{0 1, 1 1, 2 0.02015032, 3 -0.9792857, 5 0.07692308, 7 0.05263158, 8 1, 9 1, 10 -0.4029851, 11 -1, 13 -1, 14 -0.7} +{0 -1, 1 -1, 2 -0.4135338, 3 -0.8214286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.99996} +{0 1, 1 1, 2 -0.112782, 3 -0.7857143, 5 0.5384615, 6 0.75, 7 -0.5789474, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -0.92, 14 -1} +{0 -1, 1 1, 2 -0.7218045, 3 -0.9553571, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -0.99998} +{0 -1, 1 1, 2 -0.3684211, 3 -0.8214286, 5 0.8461538, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.652, 14 -1} +{0 1, 1 1, 2 0.2881204, 3 0.3214286, 5 -0.8461538, 7 0.05263158, 8 1, 9 1, 10 -0.4925373, 11 1, 13 -1, 14 -1} +{0 1, 1 -1, 2 -0.08511284, 3 -0.5239286, 5 0.5384615, 6 -0.25, 7 -0.4824561, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -1, 14 -1} +{0 1, 1 -1, 2 -0.08030069, 3 -1, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.3834586, 3 -0.875, 5 0.2307692, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 1, 13 -0.837, 14 -1} +{0 -1, 1 -1, 2 -0.06015038, 3 -0.6725, 5 -0.5384615, 6 0.75, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.76, 14 -1} +{0 -1, 1 1, 2 -0.4938346, 3 -0.8064286, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.92, 14 -1} +{0 -1, 1 1, 2 -0.5813534, 3 -0.9464286, 5 0.5384615, 6 0.75, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.78, 14 -0.99498} +{0 -1, 1 1, 2 -0.8294737, 3 -0.4821429, 5 -0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.9, 14 -0.99998} +{0 1, 1 -1, 2 -0.1705263, 3 -0.9285714, 5 -0.6923077, 7 -0.8421053, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.994} +{0 -1, 1 -1, 2 -0.7067669, 3 -0.8928571, 5 0.2307692, 6 -0.25, 7 -0.9385965, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} +{0 1, 1 1, 2 -0.4610526, 3 -0.9407143, 5 1, 6 -0.25, 7 -0.9063158, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.697, 14 -0.9342} +{0 1, 1 -1, 2 -0.8772932, 3 -0.2142857, 5 1, 6 0.75, 7 -0.9298246, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.94} +{0 -1, 1 -1, 2 -0.4159399, 3 -0.8392857, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.8, 14 -0.99718} +{0 -1, 1 -1, 2 0.1654135, 3 -0.5, 5 -0.2307692, 6 0.75, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.6490226, 3 -0.9196429, 5 0.5384615, 6 -0.25, 7 -0.9094737, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.8, 14 -1} +{0 -1, 1 1, 2 -0.1930826, 3 -0.8928571, 5 -0.6923077, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.7, 14 -1} +{0 -1, 1 1, 2 -0.6941353, 3 -0.9582143, 4 -1, 5 0.8461538, 6 0.75, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -0.99998} +{0 1, 1 1, 2 0.2706767, 3 -0.1071429, 5 -0.5384615, 6 0.75, 7 -0.4385965, 8 1, 9 -1, 10 -1, 11 1, 13 -0.976, 14 -0.95944} +{0 1, 1 -1, 2 -0.556391, 3 -0.7828571, 4 -1, 5 1, 6 0.75, 7 -0.8217544, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.93, 14 -1} +{0 1, 1 1, 2 -0.4487217, 3 -0.7142857, 5 -0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 1, 13 -0.64, 14 -1} +{0 -1, 1 1, 2 -0.7768421, 3 -0.9375, 4 -1, 5 0.07692308, 6 0.75, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99592} +{0 1, 1 1, 2 -0.3858647, 3 -0.345, 5 0.07692308, 6 -0.25, 7 -0.6842105, 8 1, 9 1, 10 -0.641791, 11 1, 13 -1, 14 -0.99558} +{0 -1, 1 1, 2 -0.112782, 3 0.8007142, 5 0.5384615, 6 0.75, 7 -0.9852632, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.24, 14 -0.9982} +{0 1, 1 -1, 2 -0.2631579, 3 -0.5714286, 5 -0.5384615, 6 -0.25, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 1, 1 1, 2 -0.2881204, 3 -0.8542857, 5 0.2307692, 6 -0.25, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 1, 13 -0.6, 14 -0.884} +{0 -1, 1 1, 2 -0.516391, 3 -0.8542857, 4 -1, 5 1, 6 0.75, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.872, 14 -0.99998} +{0 -1, 1 1, 2 -0.290827, 3 -0.8096429, 5 0.8461538, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.98998} +{0 1, 1 1, 2 -0.4712782, 3 0.3928571, 5 0.07692308, 6 -0.25, 7 -0.5087719, 8 1, 9 1, 10 -0.5223881, 11 -1, 13 -1, 14 -0.9} +{0 -1, 1 1, 2 -0.328421, 3 -0.8185714, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.98} +{0 1, 1 1, 2 -0.7969925, 3 -0.8275, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.8, 14 -0.94} +{0 -1, 1 1, 2 0.005112722, 3 -0.5832143, 5 0.2307692, 6 -0.25, 7 -0.6140351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.535, 14 -0.997} +{0 -1, 1 1, 2 -0.7518797, 3 -0.4403571, 4 -1, 5 -0.6923077, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.816, 14 -1} +{0 1, 1 1, 2 -0.7969925, 3 -0.2857143, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.96, 14 -1} +{0 1, 1 1, 2 -0.3633083, 3 -0.8214286, 5 0.2307692, 6 -0.25, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -0.761, 14 -0.996} +{0 -1, 1 1, 2 -0.6893233, 3 -0.9375, 5 -0.07692308, 6 -0.25, 7 -0.9940351, 8 -1, 9 1, 10 -0.880597, 11 -1, 13 -0.746, 14 -0.961} +{0 1, 1 1, 2 -0.290827, 3 -0.5357143, 5 -0.07692308, 6 0.75, 7 -0.7017544, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.907, 14 -1} +{0 -1, 1 -1, 2 -0.7894737, 3 -0.3185714, 5 -0.6923077, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.98} +{0 1, 1 1, 2 -0.3106768, 3 -0.7678571, 5 0.5384615, 6 0.75, 7 -0.3684211, 8 1, 9 -1, 10 -1, 11 1, 13 -0.898, 14 -0.98722} +{0 1, 1 1, 2 -0.7344361, 3 -0.2828571, 5 1, 6 -0.25, 7 -0.997193, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.94, 14 -0.99208} +{0 1, 1 -1, 2 -0.6039098, 3 -0.03571429, 5 0.5384615, 6 0.75, 7 -0.6491228, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -0.9} +{0 1, 1 -1, 2 -0.009924872, 3 -0.9671429, 5 0.8461538, 6 0.75, 7 -0.9708772, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.56, 14 -0.99988} +{0 -1, 1 -1, 2 0.1554887, 3 -1, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.2354888, 3 -0.8214286, 4 -1, 5 -0.6923077, 6 0.75, 7 -0.2982456, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.8, 14 -1} +{0 1, 1 1, 2 -0.2354888, 3 -0.8839286, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.7014925, 11 -1, 13 -0.814, 14 -0.906} +{0 -1, 1 -1, 2 -0.5813534, 3 -0.8542857, 5 0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -0.999} +{0 1, 1 1, 2 -0.8369925, 3 -0.3214286, 5 0.2307692, 6 -0.25, 7 -0.8947368, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.95588} +{0 1, 1 1, 2 -0.2255639, 3 -0.6964286, 5 0.07692308, 7 -0.5438596, 8 1, 9 1, 10 -0.5223881, 11 -1, 13 -0.883, 14 -0.9758} +{0 -1, 1 1, 2 -0.3181955, 3 -0.9464286, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.9589474, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -0.99994} +{0 1, 1 1, 2 -0.6264662, 3 -0.9821429, 5 -0.6923077, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.22797, 3 -0.8778571, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.6, 14 -1} +{0 1, 1 1, 2 -0.152782, 3 -0.97, 5 0.07692308, 6 0.75, 7 -0.9852632, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.78, 14 -0.98104} +{0 1, 1 1, 2 -0.7720301, 3 -0.4642857, 5 -0.2307692, 6 -0.25, 7 -0.9007018, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.92, 14 -0.804} +{0 -1, 1 -1, 2 -0.8096241, 3 -0.9107143, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.5840602, 3 -0.7857143, 5 -0.07692308, 6 -0.25, 7 -0.8042105, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.72, 14 -0.9998} +{0 -1, 1 1, 2 -0.7645113, 3 -0.9435714, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.9533333, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} +{0 1, 1 1, 2 -0.5639098, 3 -0.6339286, 5 1, 6 -0.25, 7 -0.6666667, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.58, 14 -0.99986} +{0 -1, 1 1, 2 -0.6039098, 3 -0.8392857, 5 -0.6923077, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.36, 14 -0.92} +{0 1, 1 -1, 2 -0.8595489, 3 -0.3392857, 5 0.5384615, 6 -0.25, 7 -0.9150877, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.94, 14 -0.9892} +{0 1, 1 -1, 2 -0.7142857, 3 -0.5803571, 5 0.5384615, 6 -0.25, 7 -0.7775439, 8 1, 9 1, 10 -0.7014925, 11 -1, 13 -0.88, 14 -0.9951} +{0 -1, 1 1, 2 -0.7043609, 3 -0.8721429, 5 0.07692308, 6 -0.25, 7 -0.9621053, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.864, 14 -0.99998} +{0 1, 1 1, 2 -0.5615038, 3 -0.6428571, 5 0.2307692, 6 -0.25, 7 -0.2280702, 8 1, 9 -1, 10 -1, 11 1, 13 -0.93, 14 -1} +{0 -1, 1 1, 2 -0.6415038, 3 -0.8421429, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.7192982, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.812, 14 -1} +{0 -1, 1 -1, 2 -0.553985, 3 -0.8810714, 5 0.5384615, 6 -0.25, 7 -0.8305263, 8 1, 9 -1, 10 -1, 11 1, 13 -0.56, 14 -1} +{0 -1, 1 1, 2 -0.7242105, 3 -0.7739286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.97884} +{0 -1, 1 -1, 2 -0.6766917, 3 -0.9257143, 4 -1, 5 -1, 6 -1, 7 -0.9649123, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.82, 14 -0.99706} +{0 -1, 1 1, 2 -0.6691729, 3 -0.9614286, 5 -0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -0.99998} +{0 1, 1 1, 2 -0.4511278, 3 -0.875, 4 -1, 5 0.3846154, 6 0.75, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 1, 13 -0.607, 14 -1} +{0 -1, 1 1, 2 0.03248126, 3 -0.7321429, 5 -0.6923077, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -0.99996} +{0 1, 1 -1, 2 -0.558797, 3 -0.75, 5 0.2307692, 6 -0.25, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.72, 14 -1} +{0 -1, 1 1, 2 -0.6490226, 3 -0.9614286, 5 0.2307692, 6 -0.25, 7 -0.9884211, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.728, 14 -0.99112} +{0 -1, 1 1, 2 -0.8547368, 3 -0.265, 5 -1, 6 -1, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -1} +{0 -1, 1 1, 2 -0.7618045, 3 -0.9167857, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.82, 14 -0.9996} +{0 -1, 1 1, 2 -0.6742857, 3 -0.9107143, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.89, 14 -1} +{0 -1, 1 1, 2 -0.922406, 3 -0.7082143, 5 -0.6923077, 6 0.75, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -1} +{0 -1, 1 1, 2 -0.6090226, 3 -0.8571429, 5 -0.8461538, 6 -0.25, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.92, 14 -1} +{0 1, 1 1, 2 0.03518791, 3 -0.75, 5 -0.2307692, 6 -0.25, 7 -0.754386, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.77, 14 -1} +{0 -1, 1 1, 2 -0.7067669, 3 -0.8035714, 5 -1, 6 -1, 7 -0.6842105, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.9995} +{0 1, 1 -1, 2 -0.1804511, 3 -0.8542857, 4 -1, 5 0.5384615, 6 0.75, 7 -0.9912281, 8 1, 9 1, 10 -0.3134328, 11 1, 13 -0.545, 14 -0.97528} +{0 1, 1 1, 2 -0.3557895, 3 0.7946429, 5 1, 6 0.75, 7 -0.8859649, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.485, 14 -0.99} +{0 -1, 1 1, 2 -0.6992481, 3 -0.1428571, 5 0.07692308, 6 -0.25, 7 -0.8536842, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.92, 14 -1} +{0 -1, 1 1, 2 -0.8520301, 3 -0.6428571, 5 0.5384615, 6 -0.25, 7 -0.9736842, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -0.99924} +{0 -1, 1 1, 2 -0.5013534, 3 -0.9642857, 5 -0.8461538, 6 0.75, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.748, 14 -1} +{0 -1, 1 -1, 2 -0.8195489, 3 -0.9464286, 5 0.07692308, 6 -0.25, 7 -0.9442105, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.86, 14 -0.9999} +{0 -1, 1 1, 2 -0.6264662, 3 -0.9403571, 5 0.8461538, 6 -0.25, 7 -0.9182456, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 -1, 1 1, 2 -0.5488722, 3 -0.8928571, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.9955} +{0 1, 1 1, 2 -0.5512782, 3 -0.3332143, 5 0.5384615, 6 0.75, 7 -0.6024561, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.619, 14 -0.99664} +{0 1, 1 1, 2 -0.6315789, 3 -0.9285714, 5 0.5384615, 6 -0.25, 7 -0.877193, 8 1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} +{0 -1, 1 1, 2 -0.7067669, 3 -0.7739286, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9708772, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.72, 14 -0.9984} +{0 -1, 1 1, 2 -0.6216541, 3 -0.07142857, 5 0.3846154, 6 -0.75, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.86, 14 -0.9778} +{0 1, 1 1, 2 0.2204512, 3 -0.5178571, 5 0.07692308, 6 0.75, 7 -0.8157895, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -1, 14 -0.99432} +{0 -1, 1 1, 2 -0.4640602, 3 -0.9732143, 5 -0.8461538, 6 -0.25, 7 -0.9385965, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.072, 14 -1} +{0 -1, 1 -1, 2 -0.6541353, 3 -0.1071429, 5 -0.8461538, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -0.97876} +{0 1, 1 1, 2 -0.4159399, 3 -0.7739286, 4 -1, 5 1, 6 -0.25, 7 -0.7778947, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.62, 14 -1} +{0 -1, 1 1, 2 -0.2255639, 3 -0.8839286, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99368} +{0 -1, 1 -1, 2 -0.8821053, 3 -1, 4 -1, 5 -0.3846154, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.914, 14 -1} +{0 1, 1 1, 2 -0.6941353, 3 -0.9525, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 1, 1 1, 2 -0.6114286, 3 -0.8064286, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.6315789, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.789, 14 -1} +{0 -1, 1 -1, 2 -0.7368421, 3 -0.9703571, 5 -0.6923077, 6 -0.25, 7 -0.9764912, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.856, 14 -1} +{0 1, 1 1, 2 -0.2129324, 3 -0.9614286, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9649123, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.8, 14 -0.98} +{0 1, 1 -1, 2 -0.6291729, 3 -0.3810714, 5 -0.2307692, 6 -0.25, 7 -0.9007018, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.997} +{0 -1, 1 1, 2 -0.8120301, 3 -1, 5 -0.8461538, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.856, 14 -1} +{0 -1, 1 1, 2 -0.4640602, 3 -0.7142857, 4 -1, 5 -0.6923077, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.589, 14 -1} +{0 -1, 1 1, 2 -0.6090226, 3 -0.6785714, 4 -1, 5 0.07692308, 7 -0.8245614, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.9758} +{0 -1, 1 -1, 2 -0.6640602, 3 -0.9107143, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -1} +{0 -1, 1 -1, 2 -0.443609, 3 -0.8928571, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.628, 14 -0.99756} +{0 -1, 1 1, 2 -0.8821053, 3 -0.6814286, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.92, 14 -1} +{0 1, 1 -1, 2 -0.2781955, 3 -0.6071429, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 1, 13 -0.772, 14 -1} +{0 1, 1 1, 2 -0.7317293, 3 -0.8185714, 4 -1, 5 0.07692308, 6 0.75, 7 -0.8185965, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 -1, 2 -0.8745865, 3 -0.2707143, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.999} +{0 1, 1 1, 2 -0.6790977, 3 -0.1189286, 5 0.5384615, 6 0.75, 7 -0.8887719, 8 1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -1} +{0 1, 1 -1, 2 -0.6390977, 3 -0.9642857, 5 0.07692308, 6 0.75, 7 -0.9385965, 8 1, 9 -1, 10 -1, 11 1, 13 -0.509, 14 -1} +{0 -1, 1 1, 2 -0.6264662, 3 -0.1071429, 4 -1, 5 -0.5384615, 6 0.75, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.99966} +{0 -1, 1 -1, 2 -0.7293233, 3 -0.5596429, 5 -0.2307692, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.78, 14 -0.98} +{0 -1, 1 1, 2 -0.7218045, 3 -0.9464286, 5 -0.07692308, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.68, 14 -1} +{0 -1, 1 1, 2 -0.6415038, 3 -0.9792857, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} +{0 1, 1 1, 2 0.04751886, 3 -0.9853571, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9824561, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -0.62, 14 -0.94536} +{0 -1, 1 1, 2 -0.7768421, 3 -1, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.3533835, 3 0.1785714, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.7192982, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -1} +{0 1, 1 -1, 2 -0.7242105, 3 -0.1725, 5 0.8461538, 6 -0.25, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.97302} +{0 -1, 1 -1, 2 0.03518791, 3 -0.9046429, 5 -0.6923077, 6 0.5, 7 -0.9764912, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9976} +{0 1, 1 1, 2 -0.1203008, 3 -0.9792857, 4 -1, 5 0.8461538, 6 0.75, 7 -0.877193, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -0.9, 14 -0.9925} +{0 1, 1 1, 2 -0.4640602, 3 -0.25, 5 1, 6 -0.25, 7 -0.5438596, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} +{0 -1, 1 1, 2 -0.7918797, 3 -0.9703571, 5 0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99912} +{0 1, 1 -1, 2 -0.847218, 3 -0.3185714, 5 -0.2307692, 6 -0.25, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} +{0 1, 1 -1, 2 -0.5888722, 3 0.03571429, 5 1, 6 0.75, 7 -0.7835088, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.88, 14 -0.99978} +{0 1, 1 1, 2 -0.1804511, 3 -0.9971429, 5 0.3846154, 6 -0.25, 7 -0.997193, 8 -1, 9 1, 10 -0.9701493, 11 -1, 12 -1, 13 -0.44, 14 -1} diff --git a/sklearn/datasets/tests/mock_openml/292/data_description.json b/sklearn/datasets/tests/mock_openml/292/data_description.json new file mode 100644 index 0000000000000..5db8d76a8642f --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/292/data_description.json @@ -0,0 +1,20 @@ +{ + "data_set_description": { + "id": "292", + "name": "Australian", + "version": "1", + "description": "**Author**: Statlog\/LibSVM \n**Source**: Unknown - 2014-11-14 \n**Please cite**: \n\nThis is the famous Australian dataset, retrieved 2014-11-14 from the libSVM site.\nIt was normalized.\n\nSource: Statlog \/ Australian\n# of classes: 2\n# of data: 690\n# of features: 14", + "format": "Sparse_ARFF", + "creator": "Statlog\/LibSVM", + "collection_date": "2014-11-14", + "upload_date": "2014-08-15T16:00:28", + "licence": "Public", + "url": "https:\/\/www.openml.org\/data\/v1\/download\/49822\/Australian.sparse_arff", + "file_id": "49822", + "default_target_attribute": "Y", + "tag": ["mythbusting_1", "study_1", "study_15", "study_20", "study_34", "study_41", "study_52", "study_7"], + "visibility": "public", + "status": "deactivated", + "md5_checksum": "b15594cf2e24945b12418638bc5c2531" + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/data_features.json b/sklearn/datasets/tests/mock_openml/292/data_features.json new file mode 100644 index 0000000000000..64d925a7b5cf2 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/292/data_features.json @@ -0,0 +1,125 @@ +{ + "data_features": { + "feature": [{ + "index": "0", + "name": "Y", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "1", + "name": "X1", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "2", + "name": "X2", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "3", + "name": "X3", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "4", + "name": "X4", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "5", + "name": "X5", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "6", + "name": "X6", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "7", + "name": "X7", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "8", + "name": "X8", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "9", + "name": "X9", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "10", + "name": "X10", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "11", + "name": "X11", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "12", + "name": "X12", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "13", + "name": "X13", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "14", + "name": "X14", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/561/cpu_1.json b/sklearn/datasets/tests/mock_openml/561/cpu_1.json new file mode 100644 index 0000000000000..74baef0c4f56a --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/561/cpu_1.json @@ -0,0 +1,43 @@ +{ + "data": { + "dataset": [{ + "did": 561, + "name": "cpu", + "version": 1, + "status": "active", + "format": "ARFF", + "file_id": 52739, + "quality": [{ + "name": "MajorityClassSize", + "value": "-1.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "30.0" + }, { + "name": "MinorityClassSize", + "value": "-1.0" + }, { + "name": "NumberOfClasses", + "value": "-1.0" + }, { + "name": "NumberOfFeatures", + "value": "8.0" + }, { + "name": "NumberOfInstances", + "value": "209.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "7.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "1.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/561/cpu_active.json b/sklearn/datasets/tests/mock_openml/561/cpu_active.json new file mode 100644 index 0000000000000..a2ca5687aebab --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/561/cpu_active.json @@ -0,0 +1,81 @@ +{ + "data": { + "dataset": [{ + "did": 561, + "name": "cpu", + "version": 1, + "status": "active", + "format": "ARFF", + "file_id": 52739, + "quality": [{ + "name": "MajorityClassSize", + "value": "-1.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "30.0" + }, { + "name": "MinorityClassSize", + "value": "-1.0" + }, { + "name": "NumberOfClasses", + "value": "-1.0" + }, { + "name": "NumberOfFeatures", + "value": "8.0" + }, { + "name": "NumberOfInstances", + "value": "209.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "7.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "1.0" + }] + }, { + "did": 796, + "name": "cpu", + "version": 2, + "status": "active", + "format": "ARFF", + "file_id": 53330, + "quality": [{ + "name": "MajorityClassSize", + "value": "156.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "30.0" + }, { + "name": "MinorityClassSize", + "value": "53.0" + }, { + "name": "NumberOfClasses", + "value": "2.0" + }, { + "name": "NumberOfFeatures", + "value": "8.0" + }, { + "name": "NumberOfInstances", + "value": "209.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "6.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "2.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/561/data.arff b/sklearn/datasets/tests/mock_openml/561/data.arff new file mode 100644 index 0000000000000..a2fcd666801ef --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/561/data.arff @@ -0,0 +1,303 @@ +% +% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +% +% Attributes 2 and 8 deleted. +% +% As used by Kilpatrick, D. & Cameron-Jones, M. (1998). Numeric prediction +% using instance-based learning with encoding length selection. In Progress +% in Connectionist-Based Information Systems. Singapore: Springer-Verlag. +% +% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +% +% 1. Title: Relative CPU Performance Data +% +% 2. Source Information +% -- Creators: Phillip Ein-Dor and Jacob Feldmesser +% -- Ein-Dor: Faculty of Management; Tel Aviv University; Ramat-Aviv; +% Tel Aviv, 69978; Israel +% -- Donor: David W. Aha (aha@ics.uci.edu) (714) 856-8779 +% -- Date: October, 1987 +% +% 3. Past Usage: +% 1. Ein-Dor and Feldmesser (CACM 4/87, pp 308-317) +% -- Results: +% -- linear regression prediction of relative cpu performance +% -- Recorded 34% average deviation from actual values +% 2. Kibler,D. & Aha,D. (1988). Instance-Based Prediction of +% Real-Valued Attributes. In Proceedings of the CSCSI (Canadian +% AI) Conference. +% -- Results: +% -- instance-based prediction of relative cpu performance +% -- similar results; no transformations required +% - Predicted attribute: cpu relative performance (numeric) +% +% 4. Relevant Information: +% -- The estimated relative performance values were estimated by the authors +% using a linear regression method. See their article (pp 308-313) for +% more details on how the relative performance values were set. +% +% 5. Number of Instances: 209 +% +% 6. Number of Attributes: 10 (6 predictive attributes, 2 non-predictive, +% 1 goal field, and the linear regression's guess) +% +% 7. Attribute Information: +% 1. vendor name: 30 +% (adviser, amdahl,apollo, basf, bti, burroughs, c.r.d, cambex, cdc, dec, +% dg, formation, four-phase, gould, honeywell, hp, ibm, ipl, magnuson, +% microdata, nas, ncr, nixdorf, perkin-elmer, prime, siemens, sperry, +% sratus, wang) +% 2. Model Name: many unique symbols +% 3. MYCT: machine cycle time in nanoseconds (integer) +% 4. MMIN: minimum main memory in kilobytes (integer) +% 5. MMAX: maximum main memory in kilobytes (integer) +% 6. CACH: cache memory in kilobytes (integer) +% 7. CHMIN: minimum channels in units (integer) +% 8. CHMAX: maximum channels in units (integer) +% 9. PRP: published relative performance (integer) +% 10. ERP: estimated relative performance from the original article (integer) +% +% 8. Missing Attribute Values: None +% +% 9. Class Distribution: the class value (PRP) is continuously valued. +% PRP Value Range: Number of Instances in Range: +% 0-20 31 +% 21-100 121 +% 101-200 27 +% 201-300 13 +% 301-400 7 +% 401-500 4 +% 501-600 2 +% above 600 4 +% +% Summary Statistics: +% Min Max Mean SD PRP Correlation +% MCYT: 17 1500 203.8 260.3 -0.3071 +% MMIN: 64 32000 2868.0 3878.7 0.7949 +% MMAX: 64 64000 11796.1 11726.6 0.8630 +% CACH: 0 256 25.2 40.6 0.6626 +% CHMIN: 0 52 4.7 6.8 0.6089 +% CHMAX: 0 176 18.2 26.0 0.6052 +% PRP: 6 1150 105.6 160.8 1.0000 +% ERP: 15 1238 99.3 154.8 0.9665 +% + +@relation 'cpu' +@attribute vendor { adviser, amdahl, apollo, basf, bti, burroughs, c.r.d, cdc, cambex, dec, dg, formation, four-phase, gould, hp, harris, honeywell, ibm, ipl, magnuson, microdata, nas, ncr, nixdorf, perkin-elmer, prime, siemens, sperry, sratus, wang} +@attribute MYCT real +@attribute MMIN real +@attribute MMAX real +@attribute CACH real +@attribute CHMIN real +@attribute CHMAX real +@attribute class real +@data +adviser,125,256,6000,256,16,128,199 +amdahl,29,8000,32000,32,8,32,253 +amdahl,29,8000,32000,32,8,32,253 +amdahl,29,8000,32000,32,8,32,253 +amdahl,29,8000,16000,32,8,16,132 +amdahl,26,8000,32000,64,8,32,290 +amdahl,23,16000,32000,64,16,32,381 +amdahl,23,16000,32000,64,16,32,381 +amdahl,23,16000,64000,64,16,32,749 +amdahl,23,32000,64000,128,32,64,1238 +apollo,400,1000,3000,0,1,2,23 +apollo,400,512,3500,4,1,6,24 +basf,60,2000,8000,65,1,8,70 +basf,50,4000,16000,65,1,8,117 +bti,350,64,64,0,1,4,15 +bti,200,512,16000,0,4,32,64 +burroughs,167,524,2000,8,4,15,23 +burroughs,143,512,5000,0,7,32,29 +burroughs,143,1000,2000,0,5,16,22 +burroughs,110,5000,5000,142,8,64,124 +burroughs,143,1500,6300,0,5,32,35 +burroughs,143,3100,6200,0,5,20,39 +burroughs,143,2300,6200,0,6,64,40 +burroughs,110,3100,6200,0,6,64,45 +c.r.d,320,128,6000,0,1,12,28 +c.r.d,320,512,2000,4,1,3,21 +c.r.d,320,256,6000,0,1,6,28 +c.r.d,320,256,3000,4,1,3,22 +c.r.d,320,512,5000,4,1,5,28 +c.r.d,320,256,5000,4,1,6,27 +cdc,25,1310,2620,131,12,24,102 +cdc,25,1310,2620,131,12,24,102 +cdc,50,2620,10480,30,12,24,74 +cdc,50,2620,10480,30,12,24,74 +cdc,56,5240,20970,30,12,24,138 +cdc,64,5240,20970,30,12,24,136 +cdc,50,500,2000,8,1,4,23 +cdc,50,1000,4000,8,1,5,29 +cdc,50,2000,8000,8,1,5,44 +cambex,50,1000,4000,8,3,5,30 +cambex,50,1000,8000,8,3,5,41 +cambex,50,2000,16000,8,3,5,74 +cambex,50,2000,16000,8,3,6,74 +cambex,50,2000,16000,8,3,6,74 +dec,133,1000,12000,9,3,12,54 +dec,133,1000,8000,9,3,12,41 +dec,810,512,512,8,1,1,18 +dec,810,1000,5000,0,1,1,28 +dec,320,512,8000,4,1,5,36 +dec,200,512,8000,8,1,8,38 +dg,700,384,8000,0,1,1,34 +dg,700,256,2000,0,1,1,19 +dg,140,1000,16000,16,1,3,72 +dg,200,1000,8000,0,1,2,36 +dg,110,1000,4000,16,1,2,30 +dg,110,1000,12000,16,1,2,56 +dg,220,1000,8000,16,1,2,42 +formation,800,256,8000,0,1,4,34 +formation,800,256,8000,0,1,4,34 +formation,800,256,8000,0,1,4,34 +formation,800,256,8000,0,1,4,34 +formation,800,256,8000,0,1,4,34 +four-phase,125,512,1000,0,8,20,19 +gould,75,2000,8000,64,1,38,75 +gould,75,2000,16000,64,1,38,113 +gould,75,2000,16000,128,1,38,157 +hp,90,256,1000,0,3,10,18 +hp,105,256,2000,0,3,10,20 +hp,105,1000,4000,0,3,24,28 +hp,105,2000,4000,8,3,19,33 +hp,75,2000,8000,8,3,24,47 +hp,75,3000,8000,8,3,48,54 +hp,175,256,2000,0,3,24,20 +harris,300,768,3000,0,6,24,23 +harris,300,768,3000,6,6,24,25 +harris,300,768,12000,6,6,24,52 +harris,300,768,4500,0,1,24,27 +harris,300,384,12000,6,1,24,50 +harris,300,192,768,6,6,24,18 +harris,180,768,12000,6,1,31,53 +honeywell,330,1000,3000,0,2,4,23 +honeywell,300,1000,4000,8,3,64,30 +honeywell,300,1000,16000,8,2,112,73 +honeywell,330,1000,2000,0,1,2,20 +honeywell,330,1000,4000,0,3,6,25 +honeywell,140,2000,4000,0,3,6,28 +honeywell,140,2000,4000,0,4,8,29 +honeywell,140,2000,4000,8,1,20,32 +honeywell,140,2000,32000,32,1,20,175 +honeywell,140,2000,8000,32,1,54,57 +honeywell,140,2000,32000,32,1,54,181 +honeywell,140,2000,32000,32,1,54,181 +honeywell,140,2000,4000,8,1,20,32 +ibm,57,4000,16000,1,6,12,82 +ibm,57,4000,24000,64,12,16,171 +ibm,26,16000,32000,64,16,24,361 +ibm,26,16000,32000,64,8,24,350 +ibm,26,8000,32000,0,8,24,220 +ibm,26,8000,16000,0,8,16,113 +ibm,480,96,512,0,1,1,15 +ibm,203,1000,2000,0,1,5,21 +ibm,115,512,6000,16,1,6,35 +ibm,1100,512,1500,0,1,1,18 +ibm,1100,768,2000,0,1,1,20 +ibm,600,768,2000,0,1,1,20 +ibm,400,2000,4000,0,1,1,28 +ibm,400,4000,8000,0,1,1,45 +ibm,900,1000,1000,0,1,2,18 +ibm,900,512,1000,0,1,2,17 +ibm,900,1000,4000,4,1,2,26 +ibm,900,1000,4000,8,1,2,28 +ibm,900,2000,4000,0,3,6,28 +ibm,225,2000,4000,8,3,6,31 +ibm,225,2000,4000,8,3,6,31 +ibm,180,2000,8000,8,1,6,42 +ibm,185,2000,16000,16,1,6,76 +ibm,180,2000,16000,16,1,6,76 +ibm,225,1000,4000,2,3,6,26 +ibm,25,2000,12000,8,1,4,59 +ibm,25,2000,12000,16,3,5,65 +ibm,17,4000,16000,8,6,12,101 +ibm,17,4000,16000,32,6,12,116 +ibm,1500,768,1000,0,0,0,18 +ibm,1500,768,2000,0,0,0,20 +ibm,800,768,2000,0,0,0,20 +ipl,50,2000,4000,0,3,6,30 +ipl,50,2000,8000,8,3,6,44 +ipl,50,2000,8000,8,1,6,44 +ipl,50,2000,16000,24,1,6,82 +ipl,50,2000,16000,24,1,6,82 +ipl,50,8000,16000,48,1,10,128 +magnuson,100,1000,8000,0,2,6,37 +magnuson,100,1000,8000,24,2,6,46 +magnuson,100,1000,8000,24,3,6,46 +magnuson,50,2000,16000,12,3,16,80 +magnuson,50,2000,16000,24,6,16,88 +magnuson,50,2000,16000,24,6,16,88 +microdata,150,512,4000,0,8,128,33 +nas,115,2000,8000,16,1,3,46 +nas,115,2000,4000,2,1,5,29 +nas,92,2000,8000,32,1,6,53 +nas,92,2000,8000,32,1,6,53 +nas,92,2000,8000,4,1,6,41 +nas,75,4000,16000,16,1,6,86 +nas,60,4000,16000,32,1,6,95 +nas,60,2000,16000,64,5,8,107 +nas,60,4000,16000,64,5,8,117 +nas,50,4000,16000,64,5,10,119 +nas,72,4000,16000,64,8,16,120 +nas,72,2000,8000,16,6,8,48 +nas,40,8000,16000,32,8,16,126 +nas,40,8000,32000,64,8,24,266 +nas,35,8000,32000,64,8,24,270 +nas,38,16000,32000,128,16,32,426 +nas,48,4000,24000,32,8,24,151 +nas,38,8000,32000,64,8,24,267 +nas,30,16000,32000,256,16,24,603 +ncr,112,1000,1000,0,1,4,19 +ncr,84,1000,2000,0,1,6,21 +ncr,56,1000,4000,0,1,6,26 +ncr,56,2000,6000,0,1,8,35 +ncr,56,2000,8000,0,1,8,41 +ncr,56,4000,8000,0,1,8,47 +ncr,56,4000,12000,0,1,8,62 +ncr,56,4000,16000,0,1,8,78 +ncr,38,4000,8000,32,16,32,80 +ncr,38,4000,8000,32,16,32,80 +ncr,38,8000,16000,64,4,8,142 +ncr,38,8000,24000,160,4,8,281 +ncr,38,4000,16000,128,16,32,190 +nixdorf,200,1000,2000,0,1,2,21 +nixdorf,200,1000,4000,0,1,4,25 +nixdorf,200,2000,8000,64,1,5,67 +perkin-elmer,250,512,4000,0,1,7,24 +perkin-elmer,250,512,4000,0,4,7,24 +perkin-elmer,250,1000,16000,1,1,8,64 +prime,160,512,4000,2,1,5,25 +prime,160,512,2000,2,3,8,20 +prime,160,1000,4000,8,1,14,29 +prime,160,1000,8000,16,1,14,43 +prime,160,2000,8000,32,1,13,53 +siemens,240,512,1000,8,1,3,19 +siemens,240,512,2000,8,1,5,22 +siemens,105,2000,4000,8,3,8,31 +siemens,105,2000,6000,16,6,16,41 +siemens,105,2000,8000,16,4,14,47 +siemens,52,4000,16000,32,4,12,99 +siemens,70,4000,12000,8,6,8,67 +siemens,59,4000,12000,32,6,12,81 +siemens,59,8000,16000,64,12,24,149 +siemens,26,8000,24000,32,8,16,183 +siemens,26,8000,32000,64,12,16,275 +siemens,26,8000,32000,128,24,32,382 +sperry,116,2000,8000,32,5,28,56 +sperry,50,2000,32000,24,6,26,182 +sperry,50,2000,32000,48,26,52,227 +sperry,50,2000,32000,112,52,104,341 +sperry,50,4000,32000,112,52,104,360 +sperry,30,8000,64000,96,12,176,919 +sperry,30,8000,64000,128,12,176,978 +sperry,180,262,4000,0,1,3,24 +sperry,180,512,4000,0,1,3,24 +sperry,180,262,4000,0,1,3,24 +sperry,180,512,4000,0,1,3,24 +sperry,124,1000,8000,0,1,8,37 +sperry,98,1000,8000,32,2,8,50 +sratus,125,2000,8000,0,2,14,41 +wang,480,512,8000,32,0,0,47 +wang,480,1000,4000,0,0,0,25 diff --git a/sklearn/datasets/tests/mock_openml/561/data_description.json b/sklearn/datasets/tests/mock_openml/561/data_description.json new file mode 100644 index 0000000000000..6568746ca3f64 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/561/data_description.json @@ -0,0 +1,17 @@ +{ + "data_set_description": { + "id": "561", + "name": "cpu", + "version": "1", + "description": "**Author**: \n**Source**: Unknown - Date unknown \n**Please cite**: \n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\nAttributes 2 and 8 deleted.\n\nAs used by Kilpatrick, D. & Cameron-Jones, M. (1998). Numeric prediction\nusing instance-based learning with encoding length selection. In Progress\nin Connectionist-Based Information Systems. Singapore: Springer-Verlag.\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n1. Title: Relative CPU Performance Data\n\n2. Source Information\n-- Creators: Phillip Ein-Dor and Jacob Feldmesser\n-- Ein-Dor: Faculty of Management; Tel Aviv University; Ramat-Aviv;\nTel Aviv, 69978; Israel\n-- Donor: David W. Aha (aha@ics.uci.edu) (714) 856-8779\n-- Date: October, 1987\n\n3. Past Usage:\n1. Ein-Dor and Feldmesser (CACM 4\/87, pp 308-317)\n-- Results:\n-- linear regression prediction of relative cpu performance\n-- Recorded 34% average deviation from actual values\n2. Kibler,D. & Aha,D. (1988). Instance-Based Prediction of\nReal-Valued Attributes. In Proceedings of the CSCSI (Canadian\nAI) Conference.\n-- Results:\n-- instance-based prediction of relative cpu performance\n-- similar results; no transformations required\n- Predicted attribute: cpu relative performance (numeric)\n\n4. Relevant Information:\n-- The estimated relative performance values were estimated by the authors\nusing a linear regression method. See their article (pp 308-313) for\nmore details on how the relative performance values were set.\n\n5. Number of Instances: 209\n\n6. Number of Attributes: 10 (6 predictive attributes, 2 non-predictive,\n1 goal field, and the linear regression's guess)\n\n7. Attribute Information:\n1. vendor name: 30\n(adviser, amdahl,apollo, basf, bti, burroughs, c.r.d, cambex, cdc, dec,\ndg, formation, four-phase, gould, honeywell, hp, ibm, ipl, magnuson,\nmicrodata, nas, ncr, nixdorf, perkin-elmer, prime, siemens, sperry,\nsratus, wang)\n2. Model Name: many unique symbols\n3. MYCT: machine cycle time in nanoseconds (integer)\n4. MMIN: minimum main memory in kilobytes (integer)\n5. MMAX: maximum main memory in kilobytes (integer)\n6. CACH: cache memory in kilobytes (integer)\n7. CHMIN: minimum channels in units (integer)\n8. CHMAX: maximum channels in units (integer)\n9. PRP: published relative performance (integer)\n10. ERP: estimated relative performance from the original article (integer)\n\n8. Missing Attribute Values: None\n\n9. Class Distribution: the class value (PRP) is continuously valued.\nPRP Value Range: Number of Instances in Range:\n0-20 31\n21-100 121\n101-200 27\n201-300 13\n301-400 7\n401-500 4\n501-600 2\nabove 600 4\n\nSummary Statistics:\nMin Max Mean SD PRP Correlation\nMCYT: 17 1500 203.8 260.3 -0.3071\nMMIN: 64 32000 2868.0 3878.7 0.7949\nMMAX: 64 64000 11796.1 11726.6 0.8630\nCACH: 0 256 25.2 40.6 0.6626\nCHMIN: 0 52 4.7 6.8 0.6089\nCHMAX: 0 176 18.2 26.0 0.6052\nPRP: 6 1150 105.6 160.8 1.0000\nERP: 15 1238 99.3 154.8 0.9665", + "format": "ARFF", + "upload_date": "2014-10-03T21:52:48", + "licence": "Public", + "url": "https:\/\/www.openml.org\/data\/v1\/download\/52739\/cpu.arff", + "file_id": "52739", + "default_target_attribute": "class", + "visibility": "public", + "status": "active", + "md5_checksum": "e1c69097976ecd20de7d215919130ccc" + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/561/data_features.json b/sklearn/datasets/tests/mock_openml/561/data_features.json new file mode 100644 index 0000000000000..6ee84439283e9 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/561/data_features.json @@ -0,0 +1,69 @@ +{ + "data_features": { + "feature": [{ + "index": "0", + "name": "vendor", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "1", + "name": "MYCT", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "2", + "name": "MMIN", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "3", + "name": "MMAX", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "4", + "name": "CACH", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "5", + "name": "CHMIN", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "6", + "name": "CHMAX", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "7", + "name": "class", + "data_type": "numeric", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 765f15fa3d996..57430dc16a46a 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -123,44 +123,37 @@ def test_fetch_openml_anneal(monkeypatch): expect_sparse=False) -def test_fetch_openml_cpu(): +def test_fetch_openml_cpu(monkeypatch): # regression dataset with numeric and categorical columns data_id = 561 data_name = 'cpu' data_version = 1 expected_observations = 209 expected_features = 7 + _monkey_patch_webbased_functions(monkeypatch, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, expect_sparse=False) -def test_fetch_openml_australian(): +def test_fetch_openml_australian(monkeypatch): # sparse dataset # Australian is the only sparse dataset that is reasonably small - # as it is inactive, we need to catch the warning + # as it is inactive, we need to catch the warning. Due to mocking + # framework, it is not deactivated in our tests data_id = 292 data_name = 'Australian' data_version = 1 expected_observations = 690 expected_features = 14 - assert_warns_message( - UserWarning, - "Version 1 of dataset Australian is inactive,", - fetch_dataset_from_openml, - **{'data_id': data_id, 'data_name': data_name, - 'data_version': data_version, - 'expected_observations': expected_observations, - 'expected_features': expected_features, - 'expect_sparse': False} - # Sadly, due to a bug in liac-arff library, the data - # is always returned as a dense array. - # discussion in OpenML library: - # https://github.com/openml/openml-python/issues/487 - ) + _monkey_patch_webbased_functions(monkeypatch, data_id) + fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features, + expect_sparse=False) def test_fetch_openml_inactive(): + # makes contact with openml server. not mocked # fetch inactive dataset by id glas2 = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, @@ -174,6 +167,7 @@ def test_fetch_openml_inactive(): def test_fetch_nonexiting(): + # makes contact with openml server. not mocked # there is no active version of glass2 assert_raise_message(ValueError, "No active dataset glass2 found", fetch_openml, None, 'glass2') From 6a834e827a41386627d4d89027e2e8c90575d01a Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sun, 15 Jul 2018 17:10:48 -0400 Subject: [PATCH 048/138] mocked ALL unit tests --- .../tests/mock_openml/2/anneal_1.json | 42 ---- .../tests/mock_openml/2/anneal_1_active.json | 43 +++++ .../mock_openml/2/anneal_None_active.json | 43 +++++ .../mock_openml/292/Australian_1_active.json | 6 + ...n_1.json => Australian_1_deactivated.json} | 0 ...ctive.json => Australian_None_active.json} | 0 .../tests/mock_openml/40675/data.arff | 180 ++++++++++++++++++ .../mock_openml/40675/data_description.json | 17 ++ .../mock_openml/40675/data_features.json | 85 +++++++++ .../mock_openml/40675/glass2_1_active.json | 1 + .../40675/glass2_1_deactivated.json | 40 ++++ .../mock_openml/40675/glass2_None_active.json | 1 + .../561/{cpu_1.json => cpu_1_active.json} | 0 .../{cpu_active.json => cpu_None_active.json} | 0 .../datasets/tests/mock_openml/61/iris_1.json | 42 ---- .../tests/mock_openml/61/iris_1_active.json | 43 +++++ .../iris_None_active.json} | 50 ++--- .../tests/mock_openml/61/iris_active.json | 81 -------- sklearn/datasets/tests/test_openml.py | 93 ++++++--- 19 files changed, 549 insertions(+), 218 deletions(-) delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1.json create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1_active.json create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/292/Australian_1_active.json rename sklearn/datasets/tests/mock_openml/292/{Australian_1.json => Australian_1_deactivated.json} (100%) rename sklearn/datasets/tests/mock_openml/292/{Australian_active.json => Australian_None_active.json} (100%) create mode 100644 sklearn/datasets/tests/mock_openml/40675/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/40675/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_1_active.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_None_active.json rename sklearn/datasets/tests/mock_openml/561/{cpu_1.json => cpu_1_active.json} (100%) rename sklearn/datasets/tests/mock_openml/561/{cpu_active.json => cpu_None_active.json} (100%) delete mode 100644 sklearn/datasets/tests/mock_openml/61/iris_1.json create mode 100644 sklearn/datasets/tests/mock_openml/61/iris_1_active.json rename sklearn/datasets/tests/mock_openml/{2/anneal_active.json => 61/iris_None_active.json} (70%) delete mode 100644 sklearn/datasets/tests/mock_openml/61/iris_active.json diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1.json b/sklearn/datasets/tests/mock_openml/2/anneal_1.json deleted file mode 100644 index d2de270a8a066..0000000000000 --- a/sklearn/datasets/tests/mock_openml/2/anneal_1.json +++ /dev/null @@ -1,42 +0,0 @@ -{"data":{"dataset":[ - {"did":2, - "name":"anneal", - "version":1, - "status":"active", - "format":"ARFF", - "file_id": 1666876, - "quality":[ - {"name":"MajorityClassSize", - "value":"684.0" - } - , {"name":"MaxNominalAttDistinctValues", - "value":"7.0" - } - , {"name":"MinorityClassSize", - "value":"8.0" - } - , {"name":"NumberOfClasses", - "value":"5.0" - } - , {"name":"NumberOfFeatures", - "value":"39.0" - } - , {"name":"NumberOfInstances", - "value":"898.0" - } - , {"name":"NumberOfInstancesWithMissingValues", - "value":"898.0" - } - , {"name":"NumberOfMissingValues", - "value":"22175.0" - } - , {"name":"NumberOfNumericFeatures", - "value":"6.0" - } - , {"name":"NumberOfSymbolicFeatures", - "value":"33.0" - } - ] - } - ]} -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json new file mode 100644 index 0000000000000..1f8b45b70ebf3 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json @@ -0,0 +1,43 @@ +{ + "data": { + "dataset": [{ + "did": 2, + "name": "anneal", + "version": 1, + "status": "active", + "format": "ARFF", + "file_id": 1666876, + "quality": [{ + "name": "MajorityClassSize", + "value": "684.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "7.0" + }, { + "name": "MinorityClassSize", + "value": "8.0" + }, { + "name": "NumberOfClasses", + "value": "5.0" + }, { + "name": "NumberOfFeatures", + "value": "39.0" + }, { + "name": "NumberOfInstances", + "value": "898.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "898.0" + }, { + "name": "NumberOfMissingValues", + "value": "22175.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "6.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "33.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_None_active.json b/sklearn/datasets/tests/mock_openml/2/anneal_None_active.json new file mode 100644 index 0000000000000..1f8b45b70ebf3 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/anneal_None_active.json @@ -0,0 +1,43 @@ +{ + "data": { + "dataset": [{ + "did": 2, + "name": "anneal", + "version": 1, + "status": "active", + "format": "ARFF", + "file_id": 1666876, + "quality": [{ + "name": "MajorityClassSize", + "value": "684.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "7.0" + }, { + "name": "MinorityClassSize", + "value": "8.0" + }, { + "name": "NumberOfClasses", + "value": "5.0" + }, { + "name": "NumberOfFeatures", + "value": "39.0" + }, { + "name": "NumberOfInstances", + "value": "898.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "898.0" + }, { + "name": "NumberOfMissingValues", + "value": "22175.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "6.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "33.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/Australian_1_active.json b/sklearn/datasets/tests/mock_openml/292/Australian_1_active.json new file mode 100644 index 0000000000000..e37b4e03ed231 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/292/Australian_1_active.json @@ -0,0 +1,6 @@ +{ + "error": { + "code": "372", + "message": "No results" + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/Australian_1.json b/sklearn/datasets/tests/mock_openml/292/Australian_1_deactivated.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/292/Australian_1.json rename to sklearn/datasets/tests/mock_openml/292/Australian_1_deactivated.json diff --git a/sklearn/datasets/tests/mock_openml/292/Australian_active.json b/sklearn/datasets/tests/mock_openml/292/Australian_None_active.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/292/Australian_active.json rename to sklearn/datasets/tests/mock_openml/292/Australian_None_active.json diff --git a/sklearn/datasets/tests/mock_openml/40675/data.arff b/sklearn/datasets/tests/mock_openml/40675/data.arff new file mode 100644 index 0000000000000..6c6456870928d --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40675/data.arff @@ -0,0 +1,180 @@ +% This dataset is taken from the Penn Machine Learning Benchmark. +% This ARFF is automatically generated. +% The data types of attributes are inferred from the data. +% In particular this means there is some uncertainty as to whether an attribute truly is categorical, numerical or ordinal. + +@RELATION glass2 +@ATTRIBUTE Refractive_Index NUMERIC +@ATTRIBUTE Sodium NUMERIC +@ATTRIBUTE Magnesium NUMERIC +@ATTRIBUTE Aluminum NUMERIC +@ATTRIBUTE Silicon NUMERIC +@ATTRIBUTE Potassium NUMERIC +@ATTRIBUTE Calcium NUMERIC +@ATTRIBUTE Barium NUMERIC +@ATTRIBUTE Iron NUMERIC +@ATTRIBUTE class {0,1} +@DATA +1.51808,13.43,2.87,1.19,72.84,0.55,9.03,0.0,0.0,0 +1.51667,12.94,3.61,1.26,72.75,0.56,8.6,0.0,0.0,1 +1.51735,13.02,3.54,1.69,72.73,0.54,8.44,0.0,0.07,0 +1.51708,13.72,3.68,1.81,72.06,0.64,7.88,0.0,0.0,1 +1.51747,12.84,3.5,1.14,73.27,0.56,8.55,0.0,0.0,0 +1.51778,13.21,2.81,1.29,72.98,0.51,9.02,0.0,0.09,0 +1.51751,12.81,3.57,1.35,73.02,0.62,8.59,0.0,0.0,0 +1.51813,13.43,3.98,1.18,72.49,0.58,8.15,0.0,0.0,1 +1.53125,10.73,0.0,2.1,69.81,0.58,13.3,3.15,0.28,1 +1.51662,12.85,3.51,1.44,73.01,0.68,8.23,0.06,0.25,1 +1.51934,13.64,3.54,0.75,72.65,0.16,8.89,0.15,0.24,0 +1.51786,12.73,3.43,1.19,72.95,0.62,8.76,0.0,0.3,0 +1.5172,13.38,3.5,1.15,72.85,0.5,8.43,0.0,0.0,0 +1.51567,13.29,3.45,1.21,72.74,0.56,8.57,0.0,0.0,0 +1.52152,13.12,3.58,0.9,72.2,0.23,9.82,0.0,0.16,0 +1.52222,14.43,0.0,1.0,72.67,0.1,11.52,0.0,0.08,1 +1.52739,11.02,0.0,0.75,73.08,0.0,14.96,0.0,0.0,1 +1.51756,13.15,3.61,1.05,73.24,0.57,8.24,0.0,0.0,0 +1.51571,12.72,3.46,1.56,73.2,0.67,8.09,0.0,0.24,0 +1.52127,14.32,3.9,0.83,71.5,0.0,9.49,0.0,0.0,0 +1.51655,13.41,3.39,1.28,72.64,0.52,8.65,0.0,0.0,0 +1.51627,13.0,3.58,1.54,72.83,0.61,8.04,0.0,0.0,1 +1.51673,13.3,3.64,1.53,72.53,0.65,8.03,0.0,0.29,1 +1.51844,13.25,3.76,1.32,72.4,0.58,8.42,0.0,0.0,1 +1.51754,13.39,3.66,1.19,72.79,0.57,8.27,0.0,0.11,0 +1.51779,13.64,3.65,0.65,73.0,0.06,8.93,0.0,0.0,0 +1.52777,12.64,0.0,0.67,72.02,0.06,14.4,0.0,0.0,1 +1.51665,13.14,3.45,1.76,72.48,0.6,8.38,0.0,0.17,0 +1.52664,11.23,0.0,0.77,73.21,0.0,14.68,0.0,0.0,1 +1.51846,13.41,3.89,1.33,72.38,0.51,8.28,0.0,0.0,1 +1.51793,13.21,3.48,1.41,72.64,0.59,8.43,0.0,0.0,0 +1.51898,13.58,3.35,1.23,72.08,0.59,8.91,0.0,0.0,0 +1.51613,13.92,3.52,1.25,72.88,0.37,7.94,0.0,0.14,1 +1.51594,13.09,3.52,1.55,72.87,0.68,8.05,0.0,0.09,1 +1.51592,12.86,3.52,2.12,72.66,0.69,7.97,0.0,0.0,1 +1.5161,13.42,3.4,1.22,72.69,0.59,8.32,0.0,0.0,0 +1.51743,12.2,3.25,1.16,73.55,0.62,8.9,0.0,0.24,1 +1.51754,13.48,3.74,1.17,72.99,0.59,8.03,0.0,0.0,0 +1.523,13.31,3.58,0.82,71.99,0.12,10.17,0.0,0.03,0 +1.51926,13.2,3.33,1.28,72.36,0.6,9.14,0.0,0.11,0 +1.51806,13.0,3.8,1.08,73.07,0.56,8.38,0.0,0.12,1 +1.51918,14.04,3.58,1.37,72.08,0.56,8.3,0.0,0.0,0 +1.51588,13.12,3.41,1.58,73.26,0.07,8.39,0.0,0.19,1 +1.51818,13.72,0.0,0.56,74.45,0.0,10.99,0.0,0.0,1 +1.52177,13.75,1.01,1.36,72.19,0.33,11.14,0.0,0.0,1 +1.51761,12.81,3.54,1.23,73.24,0.58,8.39,0.0,0.0,0 +1.52099,13.69,3.59,1.12,71.96,0.09,9.4,0.0,0.0,0 +1.51689,12.67,2.88,1.71,73.21,0.73,8.54,0.0,0.0,1 +1.51909,13.89,3.53,1.32,71.81,0.51,8.78,0.11,0.0,0 +1.51593,13.25,3.45,1.43,73.17,0.61,7.86,0.0,0.0,1 +1.51711,12.89,3.62,1.57,72.96,0.61,8.11,0.0,0.0,1 +1.51569,13.24,3.49,1.47,73.25,0.38,8.03,0.0,0.0,1 +1.51977,13.81,3.58,1.32,71.72,0.12,8.67,0.69,0.0,0 +1.53393,12.3,0.0,1.0,70.16,0.12,16.19,0.0,0.24,1 +1.51841,12.93,3.74,1.11,72.28,0.64,8.96,0.0,0.22,1 +1.51589,12.88,3.43,1.4,73.28,0.69,8.05,0.0,0.24,0 +1.51593,13.09,3.59,1.52,73.1,0.67,7.83,0.0,0.0,1 +1.51629,12.71,3.33,1.49,73.28,0.67,8.24,0.0,0.0,1 +1.5159,13.24,3.34,1.47,73.1,0.39,8.22,0.0,0.0,1 +1.51824,12.87,3.48,1.29,72.95,0.6,8.43,0.0,0.0,0 +1.51768,12.56,3.52,1.43,73.15,0.57,8.54,0.0,0.0,0 +1.52172,13.51,3.86,0.88,71.79,0.23,9.54,0.0,0.11,0 +1.51652,13.56,3.57,1.47,72.45,0.64,7.96,0.0,0.0,1 +1.5232,13.72,3.72,0.51,71.75,0.09,10.06,0.0,0.16,0 +1.51848,13.64,3.87,1.27,71.96,0.54,8.32,0.0,0.32,1 +1.51618,13.53,3.55,1.54,72.99,0.39,7.78,0.0,0.0,0 +1.51768,12.65,3.56,1.3,73.08,0.61,8.69,0.0,0.14,0 +1.51769,12.45,2.71,1.29,73.7,0.56,9.06,0.0,0.24,0 +1.51783,12.69,3.54,1.34,72.95,0.57,8.75,0.0,0.0,0 +1.51694,12.86,3.58,1.31,72.61,0.61,8.79,0.0,0.0,0 +1.51707,13.48,3.48,1.71,72.52,0.62,7.99,0.0,0.0,1 +1.5221,13.73,3.84,0.72,71.76,0.17,9.74,0.0,0.0,0 +1.51655,12.75,2.85,1.44,73.27,0.57,8.79,0.11,0.22,1 +1.52213,14.21,3.82,0.47,71.77,0.11,9.57,0.0,0.0,0 +1.51776,13.53,3.41,1.52,72.04,0.58,8.79,0.0,0.0,0 +1.5159,12.82,3.52,1.9,72.86,0.69,7.97,0.0,0.0,1 +1.52177,13.2,3.68,1.15,72.75,0.54,8.52,0.0,0.0,1 +1.51709,13.0,3.47,1.79,72.72,0.66,8.18,0.0,0.0,1 +1.51721,12.87,3.48,1.33,73.04,0.56,8.43,0.0,0.0,0 +1.51796,13.5,3.36,1.63,71.94,0.57,8.81,0.0,0.09,0 +1.51839,12.85,3.67,1.24,72.57,0.62,8.68,0.0,0.35,1 +1.51779,13.21,3.39,1.33,72.76,0.59,8.59,0.0,0.0,0 +1.51646,13.04,3.4,1.26,73.01,0.52,8.58,0.0,0.0,0 +1.518,13.71,3.93,1.54,71.81,0.54,8.21,0.0,0.15,1 +1.51645,13.44,3.61,1.54,72.39,0.66,8.03,0.0,0.0,1 +1.51869,13.19,3.37,1.18,72.72,0.57,8.83,0.0,0.16,0 +1.51409,14.25,3.09,2.08,72.28,1.1,7.08,0.0,0.0,1 +1.51872,12.93,3.66,1.56,72.51,0.58,8.55,0.0,0.12,1 +1.52475,11.45,0.0,1.88,72.19,0.81,13.24,0.0,0.34,1 +1.5202,13.98,1.35,1.63,71.76,0.39,10.56,0.0,0.18,1 +1.5175,12.82,3.55,1.49,72.75,0.54,8.52,0.0,0.19,0 +1.51784,12.68,3.67,1.16,73.11,0.61,8.7,0.0,0.0,0 +1.51811,12.96,2.96,1.43,72.92,0.6,8.79,0.14,0.0,1 +1.52196,14.36,3.85,0.89,71.36,0.15,9.15,0.0,0.0,0 +1.51755,13.0,3.6,1.36,72.99,0.57,8.4,0.0,0.11,0 +1.52614,13.7,0.0,1.36,71.24,0.19,13.44,0.0,0.1,1 +1.51687,13.23,3.54,1.48,72.84,0.56,8.1,0.0,0.0,1 +1.51905,13.6,3.62,1.11,72.64,0.14,8.76,0.0,0.0,0 +1.5166,12.99,3.18,1.23,72.97,0.58,8.81,0.0,0.24,1 +1.5169,13.33,3.54,1.61,72.54,0.68,8.11,0.0,0.0,1 +1.51645,13.4,3.49,1.52,72.65,0.67,8.08,0.0,0.1,1 +1.51742,13.27,3.62,1.24,73.08,0.55,8.07,0.0,0.0,0 +1.5161,13.33,3.53,1.34,72.67,0.56,8.33,0.0,0.0,0 +1.51574,14.86,3.67,1.74,71.87,0.16,7.36,0.0,0.12,1 +1.52172,13.48,3.74,0.9,72.01,0.18,9.61,0.0,0.07,0 +1.5186,13.36,3.43,1.43,72.26,0.51,8.6,0.0,0.0,1 +1.52213,14.21,3.82,0.47,71.77,0.11,9.57,0.0,0.0,0 +1.51851,13.2,3.63,1.07,72.83,0.57,8.41,0.09,0.17,1 +1.51643,12.16,3.52,1.35,72.89,0.57,8.53,0.0,0.0,0 +1.51966,14.77,3.75,0.29,72.02,0.03,9.0,0.0,0.0,0 +1.51674,12.79,3.52,1.54,73.36,0.66,7.9,0.0,0.0,1 +1.52725,13.8,3.15,0.66,70.57,0.08,11.64,0.0,0.0,1 +1.51769,13.65,3.66,1.11,72.77,0.11,8.6,0.0,0.0,0 +1.51829,13.24,3.9,1.41,72.33,0.55,8.31,0.0,0.1,1 +1.51596,13.02,3.56,1.54,73.11,0.72,7.9,0.0,0.0,1 +1.51215,12.99,3.47,1.12,72.98,0.62,8.35,0.0,0.31,0 +1.5173,12.35,2.72,1.63,72.87,0.7,9.23,0.0,0.0,1 +1.51605,12.9,3.44,1.45,73.06,0.44,8.27,0.0,0.0,1 +1.5167,13.24,3.57,1.38,72.7,0.56,8.44,0.0,0.1,0 +1.51797,12.74,3.48,1.35,72.96,0.64,8.68,0.0,0.0,0 +1.52152,13.05,3.65,0.87,72.32,0.19,9.85,0.0,0.17,0 +1.51646,13.41,3.55,1.25,72.81,0.68,8.1,0.0,0.0,1 +1.51811,13.33,3.85,1.25,72.78,0.52,8.12,0.0,0.0,1 +1.51892,13.46,3.83,1.26,72.55,0.57,8.21,0.0,0.14,1 +1.5164,12.55,3.48,1.87,73.23,0.63,8.08,0.0,0.09,1 +1.51753,12.57,3.47,1.38,73.39,0.6,8.55,0.0,0.06,0 +1.51784,13.08,3.49,1.28,72.86,0.6,8.49,0.0,0.0,0 +1.52227,14.17,3.81,0.78,71.35,0.0,9.69,0.0,0.0,0 +1.51663,12.93,3.54,1.62,72.96,0.64,8.03,0.0,0.21,1 +1.52223,13.21,3.77,0.79,71.99,0.13,10.02,0.0,0.0,0 +1.51674,12.87,3.56,1.64,73.14,0.65,7.99,0.0,0.0,1 +1.51911,13.9,3.73,1.18,72.12,0.06,8.89,0.0,0.0,0 +1.51748,12.86,3.56,1.27,73.21,0.54,8.38,0.0,0.17,0 +1.51596,12.79,3.61,1.62,72.97,0.64,8.07,0.0,0.26,0 +1.52068,13.55,2.09,1.67,72.18,0.53,9.57,0.27,0.17,1 +1.51625,13.36,3.58,1.49,72.72,0.45,8.21,0.0,0.0,1 +1.52152,13.05,3.65,0.87,72.22,0.19,9.85,0.0,0.17,0 +1.51743,13.3,3.6,1.14,73.09,0.58,8.17,0.0,0.0,0 +1.51793,12.79,3.5,1.12,73.03,0.64,8.77,0.0,0.0,0 +1.51847,13.1,3.97,1.19,72.44,0.6,8.43,0.0,0.0,1 +1.52101,13.64,4.49,1.1,71.78,0.06,8.75,0.0,0.0,0 +1.51766,13.21,3.69,1.29,72.61,0.57,8.22,0.0,0.0,0 +1.51764,12.98,3.54,1.21,73.0,0.65,8.53,0.0,0.0,0 +1.52081,13.78,2.28,1.43,71.99,0.49,9.85,0.0,0.17,1 +1.5182,12.62,2.76,0.83,73.81,0.35,9.42,0.0,0.2,1 +1.52667,13.99,3.7,0.71,71.57,0.02,9.82,0.0,0.1,0 +1.52211,14.19,3.78,0.91,71.36,0.23,9.14,0.0,0.37,0 +1.51736,12.78,3.62,1.29,72.79,0.59,8.7,0.0,0.0,0 +1.51841,13.02,3.62,1.06,72.34,0.64,9.13,0.0,0.15,1 +1.5159,13.02,3.58,1.51,73.12,0.69,7.96,0.0,0.0,1 +1.51631,13.34,3.57,1.57,72.87,0.61,7.89,0.0,0.0,1 +1.51837,13.14,2.84,1.28,72.85,0.55,9.07,0.0,0.0,0 +1.5241,13.83,2.9,1.17,71.15,0.08,10.79,0.0,0.0,1 +1.51763,12.8,3.66,1.27,73.01,0.6,8.56,0.0,0.0,0 +1.51761,13.89,3.6,1.36,72.73,0.48,7.83,0.0,0.0,0 +1.51775,12.85,3.48,1.23,72.97,0.61,8.56,0.09,0.22,0 +1.51763,12.61,3.59,1.31,73.29,0.58,8.5,0.0,0.0,0 +1.519,13.49,3.48,1.35,71.95,0.55,9.0,0.0,0.0,0 +1.52121,14.03,3.76,0.58,71.79,0.11,9.65,0.0,0.0,0 +1.51755,12.71,3.42,1.2,73.2,0.59,8.64,0.0,0.0,0 +1.51832,13.33,3.34,1.54,72.14,0.56,8.99,0.0,0.0,0 +1.51789,13.19,3.9,1.3,72.33,0.55,8.44,0.0,0.28,1 +1.51618,13.01,3.5,1.48,72.89,0.6,8.12,0.0,0.0,1 \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40675/data_description.json b/sklearn/datasets/tests/mock_openml/40675/data_description.json new file mode 100644 index 0000000000000..aadfd42f76ebc --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40675/data_description.json @@ -0,0 +1,17 @@ +{ + "data_set_description": { + "id": "40675", + "name": "glass2", + "version": "1", + "description": "glass2-pmlb", + "format": "ARFF", + "upload_date": "2017-04-06T12:13:53", + "licence": "public", + "url": "https:\/\/www.openml.org\/data\/v1\/download\/4965250\/glass2.arff", + "file_id": "4965250", + "default_target_attribute": "class", + "visibility": "public", + "status": "deactivated", + "md5_checksum": "c00f64361bc3aa37601743fdb6957f3f" + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40675/data_features.json b/sklearn/datasets/tests/mock_openml/40675/data_features.json new file mode 100644 index 0000000000000..b9f623c6e3b8d --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40675/data_features.json @@ -0,0 +1,85 @@ +{ + "data_features": { + "feature": [{ + "index": "0", + "name": "Refractive_Index", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "1", + "name": "Sodium", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "2", + "name": "Magnesium", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "3", + "name": "Aluminum", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "4", + "name": "Silicon", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "5", + "name": "Potassium", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "6", + "name": "Calcium", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "7", + "name": "Barium", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "8", + "name": "Iron", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "9", + "name": "class", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40675/glass2_1_active.json b/sklearn/datasets/tests/mock_openml/40675/glass2_1_active.json new file mode 100644 index 0000000000000..1426c94827350 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40675/glass2_1_active.json @@ -0,0 +1 @@ +{"error":{"code":"372","message":"No results"}} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json b/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json new file mode 100644 index 0000000000000..eac4aba40fa36 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json @@ -0,0 +1,40 @@ +{ + "data": { + "dataset": [{ + "did": 40675, + "name": "glass2", + "version": 1, + "status": "deactivated", + "format": "ARFF", + "file_id": 4965250, + "quality": [{ + "name": "MajorityClassSize", + "value": "87.0" + }, { + "name": "MinorityClassSize", + "value": "76.0" + }, { + "name": "NumberOfClasses", + "value": "2.0" + }, { + "name": "NumberOfFeatures", + "value": "10.0" + }, { + "name": "NumberOfInstances", + "value": "163.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "9.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "1.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40675/glass2_None_active.json b/sklearn/datasets/tests/mock_openml/40675/glass2_None_active.json new file mode 100644 index 0000000000000..1426c94827350 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40675/glass2_None_active.json @@ -0,0 +1 @@ +{"error":{"code":"372","message":"No results"}} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/561/cpu_1.json b/sklearn/datasets/tests/mock_openml/561/cpu_1_active.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/561/cpu_1.json rename to sklearn/datasets/tests/mock_openml/561/cpu_1_active.json diff --git a/sklearn/datasets/tests/mock_openml/561/cpu_active.json b/sklearn/datasets/tests/mock_openml/561/cpu_None_active.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/561/cpu_active.json rename to sklearn/datasets/tests/mock_openml/561/cpu_None_active.json diff --git a/sklearn/datasets/tests/mock_openml/61/iris_1.json b/sklearn/datasets/tests/mock_openml/61/iris_1.json deleted file mode 100644 index 04d748f948e0c..0000000000000 --- a/sklearn/datasets/tests/mock_openml/61/iris_1.json +++ /dev/null @@ -1,42 +0,0 @@ -{"data":{"dataset":[ - {"did":61, - "name":"iris", - "version":1, - "status":"active", - "format":"ARFF", - "file_id": 61, - "quality":[ - {"name":"MajorityClassSize", - "value":"50.0" - } - , {"name":"MaxNominalAttDistinctValues", - "value":"3.0" - } - , {"name":"MinorityClassSize", - "value":"50.0" - } - , {"name":"NumberOfClasses", - "value":"3.0" - } - , {"name":"NumberOfFeatures", - "value":"5.0" - } - , {"name":"NumberOfInstances", - "value":"150.0" - } - , {"name":"NumberOfInstancesWithMissingValues", - "value":"0.0" - } - , {"name":"NumberOfMissingValues", - "value":"0.0" - } - , {"name":"NumberOfNumericFeatures", - "value":"4.0" - } - , {"name":"NumberOfSymbolicFeatures", - "value":"1.0" - } - ] - } - ]} -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/61/iris_1_active.json b/sklearn/datasets/tests/mock_openml/61/iris_1_active.json new file mode 100644 index 0000000000000..f8180b9a456d4 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/61/iris_1_active.json @@ -0,0 +1,43 @@ +{ + "data": { + "dataset": [{ + "did": 61, + "name": "iris", + "version": 1, + "status": "active", + "format": "ARFF", + "file_id": 61, + "quality": [{ + "name": "MajorityClassSize", + "value": "50.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "3.0" + }, { + "name": "MinorityClassSize", + "value": "50.0" + }, { + "name": "NumberOfClasses", + "value": "3.0" + }, { + "name": "NumberOfFeatures", + "value": "5.0" + }, { + "name": "NumberOfInstances", + "value": "150.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "4.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "1.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_active.json b/sklearn/datasets/tests/mock_openml/61/iris_None_active.json similarity index 70% rename from sklearn/datasets/tests/mock_openml/2/anneal_active.json rename to sklearn/datasets/tests/mock_openml/61/iris_None_active.json index 5800415477eed..f87a9ae4f1f7c 100644 --- a/sklearn/datasets/tests/mock_openml/2/anneal_active.json +++ b/sklearn/datasets/tests/mock_openml/61/iris_None_active.json @@ -1,80 +1,80 @@ { "data": { "dataset": [{ - "did": 2, - "name": "anneal", + "did": 61, + "name": "iris", "version": 1, "status": "active", "format": "ARFF", - "file_id": 1666876, + "file_id": 61, "quality": [{ "name": "MajorityClassSize", - "value": "684.0" + "value": "50.0" }, { "name": "MaxNominalAttDistinctValues", - "value": "7.0" + "value": "3.0" }, { "name": "MinorityClassSize", - "value": "8.0" + "value": "50.0" }, { "name": "NumberOfClasses", - "value": "5.0" + "value": "3.0" }, { "name": "NumberOfFeatures", - "value": "39.0" + "value": "5.0" }, { "name": "NumberOfInstances", - "value": "898.0" + "value": "150.0" }, { "name": "NumberOfInstancesWithMissingValues", - "value": "898.0" + "value": "0.0" }, { "name": "NumberOfMissingValues", - "value": "22175.0" + "value": "0.0" }, { "name": "NumberOfNumericFeatures", - "value": "6.0" + "value": "4.0" }, { "name": "NumberOfSymbolicFeatures", - "value": "33.0" + "value": "1.0" }] }, { - "did": 989, - "name": "anneal", + "did": 969, + "name": "iris", "version": 3, "status": "active", "format": "ARFF", - "file_id": 53523, + "file_id": 53503, "quality": [{ "name": "MajorityClassSize", - "value": "684.0" + "value": "100.0" }, { "name": "MaxNominalAttDistinctValues", - "value": "9.0" + "value": "-1.0" }, { "name": "MinorityClassSize", - "value": "214.0" + "value": "50.0" }, { "name": "NumberOfClasses", "value": "2.0" }, { "name": "NumberOfFeatures", - "value": "39.0" + "value": "5.0" }, { "name": "NumberOfInstances", - "value": "898.0" + "value": "150.0" }, { "name": "NumberOfInstancesWithMissingValues", - "value": "898.0" + "value": "0.0" }, { "name": "NumberOfMissingValues", - "value": "22175.0" + "value": "0.0" }, { "name": "NumberOfNumericFeatures", - "value": "6.0" + "value": "4.0" }, { "name": "NumberOfSymbolicFeatures", - "value": "33.0" + "value": "1.0" }] }] } diff --git a/sklearn/datasets/tests/mock_openml/61/iris_active.json b/sklearn/datasets/tests/mock_openml/61/iris_active.json deleted file mode 100644 index 66baa1e852802..0000000000000 --- a/sklearn/datasets/tests/mock_openml/61/iris_active.json +++ /dev/null @@ -1,81 +0,0 @@ -{"data":{"dataset":[ - {"did":61, - "name":"iris", - "version":1, - "status":"active", - "format":"ARFF", - "file_id": 61, - "quality":[ - {"name":"MajorityClassSize", - "value":"50.0" - } - , {"name":"MaxNominalAttDistinctValues", - "value":"3.0" - } - , {"name":"MinorityClassSize", - "value":"50.0" - } - , {"name":"NumberOfClasses", - "value":"3.0" - } - , {"name":"NumberOfFeatures", - "value":"5.0" - } - , {"name":"NumberOfInstances", - "value":"150.0" - } - , {"name":"NumberOfInstancesWithMissingValues", - "value":"0.0" - } - , {"name":"NumberOfMissingValues", - "value":"0.0" - } - , {"name":"NumberOfNumericFeatures", - "value":"4.0" - } - , {"name":"NumberOfSymbolicFeatures", - "value":"1.0" - } - ] - } - , {"did":969, - "name":"iris", - "version":3, - "status":"active", - "format":"ARFF", - "file_id": 53503, - "quality":[ - {"name":"MajorityClassSize", - "value":"100.0" - } - , {"name":"MaxNominalAttDistinctValues", - "value":"-1.0" - } - , {"name":"MinorityClassSize", - "value":"50.0" - } - , {"name":"NumberOfClasses", - "value":"2.0" - } - , {"name":"NumberOfFeatures", - "value":"5.0" - } - , {"name":"NumberOfInstances", - "value":"150.0" - } - , {"name":"NumberOfInstancesWithMissingValues", - "value":"0.0" - } - , {"name":"NumberOfMissingValues", - "value":"0.0" - } - , {"name":"NumberOfNumericFeatures", - "value":"4.0" - } - , {"name":"NumberOfSymbolicFeatures", - "value":"1.0" - } - ] - } - ]} -} diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 57430dc16a46a..778ded6e9c41d 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -7,26 +7,35 @@ import sklearn from sklearn.datasets import fetch_openml -from sklearn.datasets.openml import _get_data_features from sklearn.utils.testing import (assert_warns_message, assert_raise_message) from sklearn.externals._liacarff.arff import load +from sklearn.externals.six.moves.urllib.error import HTTPError + + +try: + # Python 2 + from urllib2 import urlopen +except ImportError: + # Python 3+ + from urllib.request import urlopen def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, expect_sparse): # fetch with version - data_by_name_id = fetch_openml(name=data_name, version=data_version) + data_by_name_id = fetch_openml(name=data_name, version=data_version, + cache=False) assert int(data_by_name_id.details['id']) == data_id # fetch without version - fetch_openml(name=data_name) + fetch_openml(name=data_name, cache=False) # without specifying the version, there is no guarantee that the data id # will be the same # fetch with dataset id - data_by_id = fetch_openml(data_id) + data_by_id = fetch_openml(data_id, cache=False) assert data_by_id.details['name'] == data_name assert data_by_id.data.shape == (expected_observations, expected_features) assert data_by_id.target.shape == (expected_observations, ) @@ -35,9 +44,11 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, else: assert isinstance(data_by_id.data, np.ndarray) - # check numeric features: + # check numeric features. Be sure to call to the mocked version, because + # urlopen is also mocked. feature_name_type = {feature['name']: feature['data_type'] - for feature in _get_data_features(data_id)} + for feature in + sklearn.datasets.openml._get_data_features(data_id)} for idx, feature_name in enumerate(data_by_id.feature_names): if feature_name_type[feature_name] == 'numeric': # casting trick according to Jaime at @@ -74,14 +85,31 @@ def _mock_download_data(_): arff_fp = open(path, 'r').read() return load(arff_fp) - def _mock_get_data_info_by_name(name_or_id, version): - path = os.path.join(testdir_path, - 'mock_openml/%d/%s_%s.json' % (data_id, - name_or_id, - version)) - data_info = open(path, 'r').read() - data_info_json = json.loads(data_info) - return data_info_json['data']['dataset'][0] + def _mock_urlopen(url): + # url contains key value pairs of attributes, e.g., + # openml.org/api/v1/json/data_name/iris/data_version/1 should + # ideally become {data_name: 'iris', data_version: '1'} + api_prefix = "https://openml.org/api/v1/json/data/list/" + assert(url.startswith(api_prefix)) + att_list = url[len(api_prefix):].split('/') + key_val_dict = dict(zip(att_list[::2], att_list[1::2])) + # add defaults, so we can make assumptions about the content + if 'data_version' not in key_val_dict: + key_val_dict['data_version'] = None + if 'status' not in key_val_dict: + key_val_dict['status'] = "active" + mock_file = "%s_%s_%s.json" % (key_val_dict['data_name'], + key_val_dict['data_version'], + key_val_dict['status']) + json_file_path = os.path.join(testdir_path, 'mock_openml', + str(data_id), mock_file) + # load the file itself, to simulate a http error + json_data = json.loads(open(json_file_path, 'r').read()) + if 'error' in json_data: + raise HTTPError(url=None, code=412, + msg='Simulated mock error', + hdrs=None, fp=None) + return urlopen('file://' + json_file_path) context.setattr(sklearn.datasets.openml, '_get_data_description_by_id', @@ -91,9 +119,7 @@ def _mock_get_data_info_by_name(name_or_id, version): _mock_data_features) context.setattr(sklearn.datasets.openml, '_download_data', _mock_download_data) - context.setattr(sklearn.datasets.openml, - '_get_data_info_by_name', - _mock_get_data_info_by_name) + context.setattr(sklearn.datasets.openml, 'urlopen', _mock_urlopen) def test_fetch_openml_iris(monkeypatch): @@ -147,30 +173,41 @@ def test_fetch_openml_australian(monkeypatch): expected_observations = 690 expected_features = 14 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, - expected_observations, expected_features, - expect_sparse=False) - - -def test_fetch_openml_inactive(): + assert_warns_message( + UserWarning, + "Version 1 of dataset Australian is inactive,", + fetch_dataset_from_openml, + **{'data_id': data_id, 'data_name': data_name, + 'data_version': data_version, + 'expected_observations': expected_observations, + 'expected_features': expected_features, + 'expect_sparse': False} + ) + + +def test_fetch_openml_inactive(monkeypatch): # makes contact with openml server. not mocked # fetch inactive dataset by id + data_id = 40675 + _monkey_patch_webbased_functions(monkeypatch, data_id) glas2 = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, - 40675) + data_id, cache=False) # fetch inactive dataset by name and version assert glas2.data.shape == (163, 9) glas2_by_version = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, - None, "glass2", 1) - assert glas2_by_version.details['id'] == '40675' + None, "glass2", 1, cache=False) + assert int(glas2_by_version.details['id']) == data_id -def test_fetch_nonexiting(): +def test_fetch_nonexiting(monkeypatch): # makes contact with openml server. not mocked # there is no active version of glass2 + data_id = 40675 + _monkey_patch_webbased_functions(monkeypatch, data_id) assert_raise_message(ValueError, "No active dataset glass2 found", - fetch_openml, None, 'glass2') + fetch_openml, None, 'glass2', cache=False) def test_fetch_openml_raises_illegal_argument(): From d5f044162ff8f4f539c2813db1daeee204035dcc Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sun, 15 Jul 2018 17:29:32 -0400 Subject: [PATCH 049/138] fixed doc test, added unit test with ignore attributes and row id --- doc/datasets/openml.rst | 6 +- .../40966/MiceProtein_4_active.json | 40 ++ .../40966/MiceProtein_None_active.json | 40 ++ .../tests/mock_openml/40966/data.arff | 92 +++ .../mock_openml/40966/data_description.json | 20 + .../mock_openml/40966/data_features.json | 661 ++++++++++++++++++ sklearn/datasets/tests/test_openml.py | 18 + 7 files changed, 874 insertions(+), 3 deletions(-) create mode 100644 sklearn/datasets/tests/mock_openml/40966/MiceProtein_4_active.json create mode 100644 sklearn/datasets/tests/mock_openml/40966/MiceProtein_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/40966/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/40966/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/40966/data_features.json diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 2d6ac75e20a6a..3702ed573fc03 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -30,9 +30,9 @@ To fully specify a dataset, you need to provide a name and a version, though the version is optional, see :ref:`openml_versions`_ below. The dataset contains a total of 1080 examples belonging to 8 different classes:: - >>> mice.data.shape - (1080, 81) - >>> mice.target.shape + >>> mice.data.shape #doctest: +SKIP + (1080, 77) + >>> mice.target.shape #doctest: +SKIP (1080,) >>> np.unique(mice.target) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP array([b"'c-CS-m'", b"'c-CS-s'", b"'c-SC-m'", b"'c-SC-s'", b"'t-CS-m'", diff --git a/sklearn/datasets/tests/mock_openml/40966/MiceProtein_4_active.json b/sklearn/datasets/tests/mock_openml/40966/MiceProtein_4_active.json new file mode 100644 index 0000000000000..2adcf796408aa --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40966/MiceProtein_4_active.json @@ -0,0 +1,40 @@ +{ + "data": { + "dataset": [{ + "did": 40966, + "name": "MiceProtein", + "version": 4, + "status": "active", + "format": "ARFF", + "file_id": 17928620, + "quality": [{ + "name": "MajorityClassSize", + "value": "150.0" + }, { + "name": "MinorityClassSize", + "value": "105.0" + }, { + "name": "NumberOfClasses", + "value": "8.0" + }, { + "name": "NumberOfFeatures", + "value": "82.0" + }, { + "name": "NumberOfInstances", + "value": "1080.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "528.0" + }, { + "name": "NumberOfMissingValues", + "value": "1396.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "77.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "5.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40966/MiceProtein_None_active.json b/sklearn/datasets/tests/mock_openml/40966/MiceProtein_None_active.json new file mode 100644 index 0000000000000..2adcf796408aa --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40966/MiceProtein_None_active.json @@ -0,0 +1,40 @@ +{ + "data": { + "dataset": [{ + "did": 40966, + "name": "MiceProtein", + "version": 4, + "status": "active", + "format": "ARFF", + "file_id": 17928620, + "quality": [{ + "name": "MajorityClassSize", + "value": "150.0" + }, { + "name": "MinorityClassSize", + "value": "105.0" + }, { + "name": "NumberOfClasses", + "value": "8.0" + }, { + "name": "NumberOfFeatures", + "value": "82.0" + }, { + "name": "NumberOfInstances", + "value": "1080.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "528.0" + }, { + "name": "NumberOfMissingValues", + "value": "1396.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "77.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "5.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40966/data.arff b/sklearn/datasets/tests/mock_openml/40966/data.arff new file mode 100644 index 0000000000000..f1eecad7af148 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40966/data.arff @@ -0,0 +1,92 @@ +@relation mice_protein +@attribute MouseID {'18899_1','18899_10','18899_11','18899_12','18899_13','18899_14','18899_15','18899_2','18899_3','18899_4','18899_5','18899_6','18899_7','18899_8','18899_9','293_1','293_10','293_11','293_12','293_13','293_14','293_15','293_2','293_3','293_4','293_5','293_6','293_7','293_8','293_9','294_1','294_10','294_11','294_12','294_13','294_14','294_15','294_2','294_3','294_4','294_5','294_6','294_7','294_8','294_9','309_1','309_10','309_11','309_12','309_13','309_14','309_15','309_2','309_3','309_4','309_5','309_6','309_7','309_8','309_9','311_1','311_10','311_11','311_12','311_13','311_14','311_15','311_2','311_3','311_4','311_5','311_6','311_7','311_8','311_9','320_1','320_10','320_11','320_12','320_13','320_14','320_15','320_2','320_3','320_4','320_5','320_6','320_7','320_8','320_9','321_1','321_10','321_11','321_12','321_13','321_14','321_15','321_2','321_3','321_4','321_5','321_6','321_7','321_8','321_9','322_1','322_10','322_11','322_12','322_13','322_14','322_15','322_2','322_3','322_4','322_5','322_6','322_7','322_8','322_9','3411_1','3411_10','3411_11','3411_12','3411_13','3411_14','3411_15','3411_2','3411_3','3411_4','3411_5','3411_6','3411_7','3411_8','3411_9','3412_1','3412_10','3412_11','3412_12','3412_13','3412_14','3412_15','3412_2','3412_3','3412_4','3412_5','3412_6','3412_7','3412_8','3412_9','3413_1','3413_10','3413_11','3413_12','3413_13','3413_14','3413_15','3413_2','3413_3','3413_4','3413_5','3413_6','3413_7','3413_8','3413_9','3414_1','3414_10','3414_11','3414_12','3414_13','3414_14','3414_15','3414_2','3414_3','3414_4','3414_5','3414_6','3414_7','3414_8','3414_9','3415_1','3415_10','3415_11','3415_12','3415_13','3415_14','3415_15','3415_2','3415_3','3415_4','3415_5','3415_6','3415_7','3415_8','3415_9','3416_1','3416_10','3416_11','3416_12','3416_13','3416_14','3416_15','3416_2','3416_3','3416_4','3416_5','3416_6','3416_7','3416_8','3416_9','3417_1','3417_10','3417_11','3417_12','3417_13','3417_14','3417_15','3417_2','3417_3','3417_4','3417_5','3417_6','3417_7','3417_8','3417_9','3418_1','3418_10','3418_11','3418_12','3418_13','3418_14','3418_15','3418_2','3418_3','3418_4','3418_5','3418_6','3418_7','3418_8','3418_9','3419_1','3419_10','3419_11','3419_12','3419_13','3419_14','3419_15','3419_2','3419_3','3419_4','3419_5','3419_6','3419_7','3419_8','3419_9','3420_1','3420_10','3420_11','3420_12','3420_13','3420_14','3420_15','3420_2','3420_3','3420_4','3420_5','3420_6','3420_7','3420_8','3420_9','3421_1','3421_10','3421_11','3421_12','3421_13','3421_14','3421_15','3421_2','3421_3','3421_4','3421_5','3421_6','3421_7','3421_8','3421_9','3422_1','3422_10','3422_11','3422_12','3422_13','3422_14','3422_15','3422_2','3422_3','3422_4','3422_5','3422_6','3422_7','3422_8','3422_9','3423_1','3423_10','3423_11','3423_12','3423_13','3423_14','3423_15','3423_2','3423_3','3423_4','3423_5','3423_6','3423_7','3423_8','3423_9','3424_1','3424_10','3424_11','3424_12','3424_13','3424_14','3424_15','3424_2','3424_3','3424_4','3424_5','3424_6','3424_7','3424_8','3424_9','3425_1','3425_10','3425_11','3425_12','3425_13','3425_14','3425_15','3425_2','3425_3','3425_4','3425_5','3425_6','3425_7','3425_8','3425_9','3426_1','3426_10','3426_11','3426_12','3426_13','3426_14','3426_15','3426_2','3426_3','3426_4','3426_5','3426_6','3426_7','3426_8','3426_9','3429_1','3429_10','3429_11','3429_12','3429_13','3429_14','3429_15','3429_2','3429_3','3429_4','3429_5','3429_6','3429_7','3429_8','3429_9','3476_1','3476_10','3476_11','3476_12','3476_13','3476_14','3476_15','3476_2','3476_3','3476_4','3476_5','3476_6','3476_7','3476_8','3476_9','3477_1','3477_10','3477_11','3477_12','3477_13','3477_14','3477_15','3477_2','3477_3','3477_4','3477_5','3477_6','3477_7','3477_8','3477_9','3478_1','3478_10','3478_11','3478_12','3478_13','3478_14','3478_15','3478_2','3478_3','3478_4','3478_5','3478_6','3478_7','3478_8','3478_9','3479_1','3479_10','3479_11','3479_12','3479_13','3479_14','3479_15','3479_2','3479_3','3479_4','3479_5','3479_6','3479_7','3479_8','3479_9','3480_1','3480_10','3480_11','3480_12','3480_13','3480_14','3480_15','3480_2','3480_3','3480_4','3480_5','3480_6','3480_7','3480_8','3480_9','3481_1','3481_10','3481_11','3481_12','3481_13','3481_14','3481_15','3481_2','3481_3','3481_4','3481_5','3481_6','3481_7','3481_8','3481_9','3483_1','3483_10','3483_11','3483_12','3483_13','3483_14','3483_15','3483_2','3483_3','3483_4','3483_5','3483_6','3483_7','3483_8','3483_9','3484_1','3484_10','3484_11','3484_12','3484_13','3484_14','3484_15','3484_2','3484_3','3484_4','3484_5','3484_6','3484_7','3484_8','3484_9','3488_1','3488_10','3488_11','3488_12','3488_13','3488_14','3488_15','3488_2','3488_3','3488_4','3488_5','3488_6','3488_7','3488_8','3488_9','3489_1','3489_10','3489_11','3489_12','3489_13','3489_14','3489_15','3489_2','3489_3','3489_4','3489_5','3489_6','3489_7','3489_8','3489_9','3490_1','3490_10','3490_11','3490_12','3490_13','3490_14','3490_15','3490_2','3490_3','3490_4','3490_5','3490_6','3490_7','3490_8','3490_9','3491_1','3491_10','3491_11','3491_12','3491_13','3491_14','3491_15','3491_2','3491_3','3491_4','3491_5','3491_6','3491_7','3491_8','3491_9','3497_1','3497_10','3497_11','3497_12','3497_13','3497_14','3497_15','3497_2','3497_3','3497_4','3497_5','3497_6','3497_7','3497_8','3497_9','3498_1','3498_10','3498_11','3498_12','3498_13','3498_14','3498_15','3498_2','3498_3','3498_4','3498_5','3498_6','3498_7','3498_8','3498_9','3499_1','3499_10','3499_11','3499_12','3499_13','3499_14','3499_15','3499_2','3499_3','3499_4','3499_5','3499_6','3499_7','3499_8','3499_9','3500_1','3500_10','3500_11','3500_12','3500_13','3500_14','3500_15','3500_2','3500_3','3500_4','3500_5','3500_6','3500_7','3500_8','3500_9','3501_1','3501_10','3501_11','3501_12','3501_13','3501_14','3501_15','3501_2','3501_3','3501_4','3501_5','3501_6','3501_7','3501_8','3501_9','3502_1','3502_10','3502_11','3502_12','3502_13','3502_14','3502_15','3502_2','3502_3','3502_4','3502_5','3502_6','3502_7','3502_8','3502_9','3503_1','3503_10','3503_11','3503_12','3503_13','3503_14','3503_15','3503_2','3503_3','3503_4','3503_5','3503_6','3503_7','3503_8','3503_9','3504_1','3504_10','3504_11','3504_12','3504_13','3504_14','3504_15','3504_2','3504_3','3504_4','3504_5','3504_6','3504_7','3504_8','3504_9','3505_1','3505_10','3505_11','3505_12','3505_13','3505_14','3505_15','3505_2','3505_3','3505_4','3505_5','3505_6','3505_7','3505_8','3505_9','3507_1','3507_10','3507_11','3507_12','3507_13','3507_14','3507_15','3507_2','3507_3','3507_4','3507_5','3507_6','3507_7','3507_8','3507_9','3513_1','3513_10','3513_11','3513_12','3513_13','3513_14','3513_15','3513_2','3513_3','3513_4','3513_5','3513_6','3513_7','3513_8','3513_9','3516_1','3516_10','3516_11','3516_12','3516_13','3516_14','3516_15','3516_2','3516_3','3516_4','3516_5','3516_6','3516_7','3516_8','3516_9','3517_1','3517_10','3517_11','3517_12','3517_13','3517_14','3517_15','3517_2','3517_3','3517_4','3517_5','3517_6','3517_7','3517_8','3517_9','3520_1','3520_10','3520_11','3520_12','3520_13','3520_14','3520_15','3520_2','3520_3','3520_4','3520_5','3520_6','3520_7','3520_8','3520_9','3521_1','3521_10','3521_11','3521_12','3521_13','3521_14','3521_15','3521_2','3521_3','3521_4','3521_5','3521_6','3521_7','3521_8','3521_9','3522_1','3522_10','3522_11','3522_12','3522_13','3522_14','3522_15','3522_2','3522_3','3522_4','3522_5','3522_6','3522_7','3522_8','3522_9','3525_1','3525_10','3525_11','3525_12','3525_13','3525_14','3525_15','3525_2','3525_3','3525_4','3525_5','3525_6','3525_7','3525_8','3525_9','3530_1','3530_10','3530_11','3530_12','3530_13','3530_14','3530_15','3530_2','3530_3','3530_4','3530_5','3530_6','3530_7','3530_8','3530_9','3534_1','3534_10','3534_11','3534_12','3534_13','3534_14','3534_15','3534_2','3534_3','3534_4','3534_5','3534_6','3534_7','3534_8','3534_9','3605_1','3605_10','3605_11','3605_12','3605_13','3605_14','3605_15','3605_2','3605_3','3605_4','3605_5','3605_6','3605_7','3605_8','3605_9','3606_1','3606_10','3606_11','3606_12','3606_13','3606_14','3606_15','3606_2','3606_3','3606_4','3606_5','3606_6','3606_7','3606_8','3606_9','361_1','361_10','361_11','361_12','361_13','361_14','361_15','361_2','361_3','361_4','361_5','361_6','361_7','361_8','361_9','362_1','362_10','362_11','362_12','362_13','362_14','362_15','362_2','362_3','362_4','362_5','362_6','362_7','362_8','362_9','363_1','363_10','363_11','363_12','363_13','363_14','363_15','363_2','363_3','363_4','363_5','363_6','363_7','363_8','363_9','364_1','364_10','364_11','364_12','364_13','364_14','364_15','364_2','364_3','364_4','364_5','364_6','364_7','364_8','364_9','365_1','365_10','365_11','365_12','365_13','365_14','365_15','365_2','365_3','365_4','365_5','365_6','365_7','365_8','365_9','50810A_1','50810A_10','50810A_11','50810A_12','50810A_13','50810A_14','50810A_15','50810A_2','50810A_3','50810A_4','50810A_5','50810A_6','50810A_7','50810A_8','50810A_9','50810B_1','50810B_10','50810B_11','50810B_12','50810B_13','50810B_14','50810B_15','50810B_2','50810B_3','50810B_4','50810B_5','50810B_6','50810B_7','50810B_8','50810B_9','50810C_1','50810C_10','50810C_11','50810C_12','50810C_13','50810C_14','50810C_15','50810C_2','50810C_3','50810C_4','50810C_5','50810C_6','50810C_7','50810C_8','50810C_9','50810D_1','50810D_10','50810D_11','50810D_12','50810D_13','50810D_14','50810D_15','50810D_2','50810D_3','50810D_4','50810D_5','50810D_6','50810D_7','50810D_8','50810D_9','50810E_1','50810E_10','50810E_11','50810E_12','50810E_13','50810E_14','50810E_15','50810E_2','50810E_3','50810E_4','50810E_5','50810E_6','50810E_7','50810E_8','50810E_9','50810F_1','50810F_10','50810F_11','50810F_12','50810F_13','50810F_14','50810F_15','50810F_2','50810F_3','50810F_4','50810F_5','50810F_6','50810F_7','50810F_8','50810F_9','J1291_1','J1291_10','J1291_11','J1291_12','J1291_13','J1291_14','J1291_15','J1291_2','J1291_3','J1291_4','J1291_5','J1291_6','J1291_7','J1291_8','J1291_9','J2292_1','J2292_10','J2292_11','J2292_12','J2292_13','J2292_14','J2292_15','J2292_2','J2292_3','J2292_4','J2292_5','J2292_6','J2292_7','J2292_8','J2292_9','J3295_1','J3295_10','J3295_11','J3295_12','J3295_13','J3295_14','J3295_15','J3295_2','J3295_3','J3295_4','J3295_5','J3295_6','J3295_7','J3295_8','J3295_9'} +@attribute DYRK1A_N numeric +@attribute ITSN1_N numeric +@attribute BDNF_N numeric +@attribute NR1_N numeric +@attribute NR2A_N numeric +@attribute pAKT_N numeric +@attribute pBRAF_N numeric +@attribute pCAMKII_N numeric +@attribute pCREB_N numeric +@attribute pELK_N numeric +@attribute pERK_N numeric +@attribute pJNK_N numeric +@attribute PKCA_N numeric +@attribute pMEK_N numeric +@attribute pNR1_N numeric +@attribute pNR2A_N numeric +@attribute pNR2B_N numeric +@attribute pPKCAB_N numeric +@attribute pRSK_N numeric +@attribute AKT_N numeric +@attribute BRAF_N numeric +@attribute CAMKII_N numeric +@attribute CREB_N numeric +@attribute ELK_N numeric +@attribute ERK_N numeric +@attribute GSK3B_N numeric +@attribute JNK_N numeric +@attribute MEK_N numeric +@attribute TRKA_N numeric +@attribute RSK_N numeric +@attribute APP_N numeric +@attribute Bcatenin_N numeric +@attribute SOD1_N numeric +@attribute MTOR_N numeric +@attribute P38_N numeric +@attribute pMTOR_N numeric +@attribute DSCR1_N numeric +@attribute AMPKA_N numeric +@attribute NR2B_N numeric +@attribute pNUMB_N numeric +@attribute RAPTOR_N numeric +@attribute TIAM1_N numeric +@attribute pP70S6_N numeric +@attribute NUMB_N numeric +@attribute P70S6_N numeric +@attribute pGSK3B_N numeric +@attribute pPKCG_N numeric +@attribute CDK5_N numeric +@attribute S6_N numeric +@attribute ADARB1_N numeric +@attribute AcetylH3K9_N numeric +@attribute RRP1_N numeric +@attribute BAX_N numeric +@attribute ARC_N numeric +@attribute ERBB4_N numeric +@attribute nNOS_N numeric +@attribute Tau_N numeric +@attribute GFAP_N numeric +@attribute GluR3_N numeric +@attribute GluR4_N numeric +@attribute IL1B_N numeric +@attribute P3525_N numeric +@attribute pCASP9_N numeric +@attribute PSD95_N numeric +@attribute SNCA_N numeric +@attribute Ubiquitin_N numeric +@attribute pGSK3B_Tyr216_N numeric +@attribute SHH_N numeric +@attribute BAD_N numeric +@attribute BCL2_N numeric +@attribute pS6_N numeric +@attribute pCFOS_N numeric +@attribute SYP_N numeric +@attribute H3AcK18_N numeric +@attribute EGR1_N numeric +@attribute H3MeK4_N numeric +@attribute CaNA_N numeric +@attribute Genotype {'Control','Ts65Dn'} +@attribute Treatment {'Memantine','Saline'} +@attribute Behavior {'C/S','S/C'} +@attribute class {'c-CS-m','c-CS-s','c-SC-m','c-SC-s','t-CS-m','t-CS-s','t-SC-m','t-SC-s'} +@data +'309_1',0.503643884,0.747193224,0.4301753,2.81632854,5.990151664,0.218830018,0.177565491,2.373744337,0.232223754,1.750935592,0.687906244,0.306381721,0.402698444,0.296927319,1.022060272,0.605672641,1.877683671,2.308745322,0.44159937,0.859365767,0.416289147,0.369608036,0.178944258,1.866358085,3.685247193,1.537226709,0.264526295,0.319676975,0.813866457,0.165845972,0.453909789,3.037620642,0.369509553,0.458538507,0.335335828,0.825192043,0.576915501,0.448099271,0.58627142,0.394721292,0.339570613,0.482863896,0.294169785,0.182150472,0.84272515,0.192608387,1.443090669,0.29469997,0.354604528,1.339069956,0.170118794,0.159102447,0.18885166,0.106305209,0.144989339,0.176667682,0.125190375,0.115290892,0.228043456,0.14275561,0.430957458,0.247537821,1.603309981,2.014874607,0.108234339,1.044979186,0.831556503,0.18885166,0.122652046,?,0.106305209,0.108335872,0.427099198,0.114783227,0.131790029,0.128185603,1.67565235,'Control','Memantine','C/S','c-CS-m' +'309_2',0.51461708,0.689063548,0.411770344,2.789514042,5.685037861,0.211636155,0.172817023,2.292149909,0.226972108,1.596376881,0.69500623,0.299051088,0.385986773,0.281318892,0.956675932,0.587558708,1.725773986,2.043036519,0.445221892,0.834659254,0.400364229,0.356177514,0.17367967,1.761046679,3.48528707,1.509249497,0.25572702,0.304418672,0.780504169,0.157193521,0.430940286,2.921882488,0.342279306,0.423559858,0.324834659,0.761717627,0.545097287,0.420876066,0.545097287,0.368254577,0.321959168,0.454519314,0.276430557,0.182086309,0.847614612,0.194815275,1.439459795,0.294059816,0.354548277,1.306323088,0.171427093,0.158128945,0.184570009,0.106592156,0.150470868,0.178309014,0.13427507,0.118234503,0.238073062,0.142036635,0.457156163,0.257632205,1.671737556,2.004605195,0.109748525,1.009883059,0.849270413,0.200403601,0.11668219,?,0.106592156,0.10431543,0.441581289,0.111973507,0.13510297,0.1311187,1.743609645,'Control','Memantine','C/S','c-CS-m' +'309_3',0.509183088,0.730246795,0.418308781,2.687201071,5.622058542,0.209010905,0.175722212,2.283336522,0.230246795,1.561316243,0.677348383,0.291276067,0.381002487,0.28171035,1.003634972,0.602448823,1.731872967,2.017983547,0.467667878,0.814329443,0.399846949,0.36808877,0.173904725,1.765544289,3.571455902,1.501243543,0.259613545,0.3117467,0.785154008,0.160895351,0.423187297,2.944136216,0.343696193,0.425004783,0.324851731,0.757030802,0.543619667,0.404629807,0.552994069,0.363879855,0.3130859,0.447197245,0.256648173,0.18438769,0.856165847,0.200737337,1.52436418,0.301880744,0.386086771,1.279600342,0.185456294,0.148696303,0.190532165,0.108303056,0.145330199,0.176212866,0.132560376,0.117760205,0.244817269,0.142444967,0.510472323,0.255343022,1.663549904,2.016830519,0.108196196,0.996847617,0.846708698,0.193684548,0.118508228,?,0.108303056,0.106219278,0.435776875,0.111882881,0.133361829,0.127431075,1.926426587,'Control','Memantine','C/S','c-CS-m' +'309_4',0.442106692,0.61707615,0.358626307,2.466947197,4.97950319,0.222885842,0.176462604,2.152300801,0.207004208,1.595086195,0.583276775,0.296728655,0.37708701,0.313831953,0.875390254,0.520293199,1.566852179,2.132754174,0.477670694,0.727704629,0.385638659,0.362970001,0.179448894,1.286276639,2.970137098,1.419709515,0.259535768,0.279218135,0.734491652,0.162209855,0.410614904,2.500203611,0.344509298,0.429211348,0.330120809,0.746979775,0.54676259,0.386860323,0.547848514,0.366770734,0.328491923,0.442649654,0.398534003,0.161767701,0.760233521,0.184169439,1.612382051,0.29638178,0.290679519,1.19876451,0.159799063,0.16611228,0.185323468,0.103183762,0.14065576,0.163804222,0.123209558,0.117439413,0.234946711,0.145068223,0.430995859,0.251103116,1.484624262,1.957233046,0.119883239,0.990224696,0.833276763,0.192111873,0.13278121,?,0.103183762,0.111261965,0.391690992,0.130405268,0.147444165,0.146901093,1.700563438,'Control','Memantine','C/S','c-CS-m' +'309_5',0.434940244,0.617429838,0.358802202,2.36578488,4.718678663,0.213105949,0.173626964,2.134013697,0.192157916,1.504229891,0.550960118,0.286961192,0.363502081,0.277964281,0.864912045,0.507989795,1.480059084,2.013696791,0.483416141,0.687793742,0.367530549,0.355310863,0.174835504,1.324694508,2.896334094,1.35987646,0.250704982,0.273667249,0.702699073,0.154827447,0.398549752,2.456559688,0.329125822,0.408755203,0.313414798,0.691956493,0.536860481,0.360816436,0.512823956,0.35155096,0.312206258,0.419094938,0.393447026,0.16020025,0.768112919,0.185718259,1.645807259,0.29682937,0.309345015,1.206994855,0.164650257,0.16068697,0.188221388,0.104783757,0.141983034,0.167709637,0.136837714,0.116047838,0.255527743,0.140870533,0.481226533,0.25177305,1.534835211,2.009108608,0.119524406,0.997774997,0.878667779,0.205604228,0.129954109,?,0.104783757,0.110693923,0.434153803,0.118481435,0.140314282,0.148379919,1.839730218,'Control','Memantine','C/S','c-CS-m' +'309_6',0.447506385,0.62817583,0.36738809,2.38593897,4.807635435,0.218577766,0.176233365,2.14128243,0.195187525,1.442398172,0.566339562,0.289823901,0.363892996,0.26683694,0.85912085,0.521306627,1.538244388,1.968275306,0.495899987,0.672402205,0.36940449,0.357171663,0.179728458,1.227449926,2.956983466,1.447909665,0.250840167,0.284043554,0.704395752,0.156875924,0.391047184,2.467132679,0.327597795,0.404489851,0.296276381,0.674418605,0.539723081,0.354214276,0.51431644,0.347224089,0.303132141,0.412824304,0.382578304,0.162330317,0.77969457,0.186792986,1.634615385,0.28803733,0.332367081,1.12344457,0.175692873,0.150593891,0.183823529,0.106476244,0.13956448,0.174844457,0.130514706,0.115243213,0.236849548,0.13645362,0.478577489,0.244485294,1.507777149,2.003535068,0.120687217,0.920178167,0.843679299,0.190469457,0.131575226,?,0.106476244,0.109445701,0.439833145,0.11665724,0.140766403,0.14218043,1.816388575,'Control','Memantine','C/S','c-CS-m' +'309_7',0.428032684,0.573695789,0.342708988,2.334223759,4.473130107,0.225172847,0.184003771,2.012413576,0.195788812,1.612036455,0.509899434,0.299654305,0.37115022,0.277655563,0.844280327,0.485386549,1.494814582,2.01257071,0.497485858,0.646134507,0.395977373,0.359522313,0.186046512,1.10779384,2.599622879,1.364236329,0.261470773,0.276241358,0.693117536,0.162162162,0.405562539,2.288812068,0.345380264,0.427561282,0.333909491,0.757542426,0.558610937,0.368950346,0.544626021,0.360307982,0.329352608,0.420490258,0.465116279,0.145565999,0.70224765,0.177033102,1.773845525,0.292194524,0.266857376,1.03228443,0.147854516,0.149816101,0.181610135,0.097834083,0.142787086,0.15185942,0.115978749,0.114752758,0.22451982,0.144830405,0.415529219,0.238005721,1.338782182,1.861708214,0.117041275,1.028769922,0.798283613,0.181610135,0.141806293,?,0.097834083,0.111483449,0.406293421,0.13722926,0.156681651,0.157498978,1.528483858,'Control','Memantine','C/S','c-CS-m' +% JvR: pruned the rest of the file for space reasons diff --git a/sklearn/datasets/tests/mock_openml/40966/data_description.json b/sklearn/datasets/tests/mock_openml/40966/data_description.json new file mode 100644 index 0000000000000..133fbd313d2ff --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40966/data_description.json @@ -0,0 +1,20 @@ +{ + "data_set_description": { + "id": "40966", + "name": "MiceProtein", + "version": "4", + "description": "**Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios \n**Source**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/datasets\/Mice+Protein+Expression) - 2015 \n**Please cite**: Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): e0129126.\n\nExpression levels of 77 proteins measured in the cerebral cortex of 8 classes of control and Down syndrome mice exposed to context fear conditioning, a task used to assess associative learning.\n\nThe data set consists of the expression levels of 77 proteins\/protein modifications that produced detectable signals in the nuclear fraction of cortex. There are 38 control mice and 34 trisomic mice (Down syndrome), for a total of 72 mice. In the experiments, 15 measurements were registered of each protein per sample\/mouse. Therefore, for control mice, there are 38x15, or 570 measurements, and for trisomic mice, there are 34x15, or 510 measurements. The dataset contains a total of 1080 measurements per protein. Each measurement can be considered as an independent sample\/mouse. \n\nThe eight classes of mice are described based on features such as genotype, behavior and treatment. According to genotype, mice can be control or trisomic. According to behavior, some mice have been stimulated to learn (context-shock) and others have not (shock-context) and in order to assess the effect of the drug memantine in recovering the ability to learn in trisomic mice, some mice have been injected with the drug and others have not. \n\nClasses: \n```\n* c-CS-s: control mice, stimulated to learn, injected with saline (9 mice) \n* c-CS-m: control mice, stimulated to learn, injected with memantine (10 mice) \n* c-SC-s: control mice, not stimulated to learn, injected with saline (9 mice) \n* c-SC-m: control mice, not stimulated to learn, injected with memantine (10 mice) \n* t-CS-s: trisomy mice, stimulated to learn, injected with saline (7 mice) \n* t-CS-m: trisomy mice, stimulated to learn, injected with memantine (9 mice) \n* t-SC-s: trisomy mice, not stimulated to learn, injected with saline (9 mice) \n* t-SC-m: trisomy mice, not stimulated to learn, injected with memantine (9 mice) \n```\n\nThe aim is to identify subsets of proteins that are discriminant between the classes. \n\n### Attribute Information:\n\n```\n1 Mouse ID \n2..78 Values of expression levels of 77 proteins; the names of proteins are followed by “_nâ€\u009d indicating that they were measured in the nuclear fraction. For example: DYRK1A_n \n79 Genotype: control (c) or trisomy (t) \n80 Treatment type: memantine (m) or saline (s) \n81 Behavior: context-shock (CS) or shock-context (SC) \n82 Class: c-CS-s, c-CS-m, c-SC-s, c-SC-m, t-CS-s, t-CS-m, t-SC-s, t-SC-m \n```\n\n### Relevant Papers:\n\nHiguera C, Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): e0129126. [Web Link] journal.pone.0129126 \n\nAhmed MM, Dhanasekaran AR, Block A, Tong S, Costa ACS, Stasko M, et al. (2015) Protein Dynamics Associated with Failed and Rescued Learning in the Ts65Dn Mouse Model of Down Syndrome. PLoS ONE 10(3): e0119491.", + "format": "ARFF", + "upload_date": "2017-11-08T16:00:15", + "licence": "Public", + "url": "https:\/\/www.openml.org\/data\/v1\/download\/17928620\/MiceProtein.arff", + "file_id": "17928620", + "default_target_attribute": "class", + "row_id_attribute": "MouseID", + "ignore_attribute": ["Genotype", "Treatment", "Behavior"], + "tag": ["OpenML-CC18", "study_135", "study_98", "study_99"], + "visibility": "public", + "status": "active", + "md5_checksum": "3c479a6885bfa0438971388283a1ce32" + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40966/data_features.json b/sklearn/datasets/tests/mock_openml/40966/data_features.json new file mode 100644 index 0000000000000..8d550e5339686 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/40966/data_features.json @@ -0,0 +1,661 @@ +{ + "data_features": { + "feature": [{ + "index": "0", + "name": "MouseID", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "true", + "number_of_missing_values": "0" + }, { + "index": "1", + "name": "DYRK1A_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "2", + "name": "ITSN1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "3", + "name": "BDNF_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "4", + "name": "NR1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "5", + "name": "NR2A_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "6", + "name": "pAKT_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "7", + "name": "pBRAF_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "8", + "name": "pCAMKII_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "9", + "name": "pCREB_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "10", + "name": "pELK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "11", + "name": "pERK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "12", + "name": "pJNK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "13", + "name": "PKCA_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "14", + "name": "pMEK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "15", + "name": "pNR1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "16", + "name": "pNR2A_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "17", + "name": "pNR2B_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "18", + "name": "pPKCAB_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "19", + "name": "pRSK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "20", + "name": "AKT_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "21", + "name": "BRAF_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "22", + "name": "CAMKII_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "23", + "name": "CREB_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "24", + "name": "ELK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "18" + }, { + "index": "25", + "name": "ERK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "26", + "name": "GSK3B_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "27", + "name": "JNK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "28", + "name": "MEK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "7" + }, { + "index": "29", + "name": "TRKA_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "30", + "name": "RSK_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "31", + "name": "APP_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "32", + "name": "Bcatenin_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "18" + }, { + "index": "33", + "name": "SOD1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "34", + "name": "MTOR_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "35", + "name": "P38_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "36", + "name": "pMTOR_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "37", + "name": "DSCR1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "38", + "name": "AMPKA_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "39", + "name": "NR2B_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "40", + "name": "pNUMB_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "41", + "name": "RAPTOR_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "42", + "name": "TIAM1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "43", + "name": "pP70S6_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "3" + }, { + "index": "44", + "name": "NUMB_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "45", + "name": "P70S6_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "46", + "name": "pGSK3B_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "47", + "name": "pPKCG_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "48", + "name": "CDK5_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "49", + "name": "S6_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "50", + "name": "ADARB1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "51", + "name": "AcetylH3K9_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "52", + "name": "RRP1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "53", + "name": "BAX_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "54", + "name": "ARC_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "55", + "name": "ERBB4_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "56", + "name": "nNOS_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "57", + "name": "Tau_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "58", + "name": "GFAP_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "59", + "name": "GluR3_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "60", + "name": "GluR4_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "61", + "name": "IL1B_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "62", + "name": "P3525_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "63", + "name": "pCASP9_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "64", + "name": "PSD95_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "65", + "name": "SNCA_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "66", + "name": "Ubiquitin_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "67", + "name": "pGSK3B_Tyr216_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "68", + "name": "SHH_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "69", + "name": "BAD_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "213" + }, { + "index": "70", + "name": "BCL2_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "285" + }, { + "index": "71", + "name": "pS6_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "72", + "name": "pCFOS_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "75" + }, { + "index": "73", + "name": "SYP_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "74", + "name": "H3AcK18_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "180" + }, { + "index": "75", + "name": "EGR1_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "210" + }, { + "index": "76", + "name": "H3MeK4_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "270" + }, { + "index": "77", + "name": "CaNA_N", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "78", + "name": "Genotype", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "true", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "79", + "name": "Treatment", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "true", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "80", + "name": "Behavior", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "true", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "81", + "name": "class", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 778ded6e9c41d..1006e8310b497 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -185,6 +185,24 @@ def test_fetch_openml_australian(monkeypatch): ) +def test_fetch_openml_miceprotein(monkeypatch): + data_id = 40966 + data_name = 'MiceProtein' + data_version = 4 + expected_observations = 7 + expected_features = 77 + _monkey_patch_webbased_functions(monkeypatch, data_id) + data = fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features, + expect_sparse=False) + # JvR: very important check, as this dataset defined several row ids + # and ignore attributes. Note that data_features json has 82 attributes, + # and row id (1), ignore attributes (3) have been removed (and target is + # stored in data.target) + assert (data.data.shape == (expected_observations, expected_features)) + assert (data.target.shape == (expected_observations, )) + + def test_fetch_openml_inactive(monkeypatch): # makes contact with openml server. not mocked # fetch inactive dataset by id From f13ed6332973c7c0cb990c736a9d2f97f2240eb8 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sun, 15 Jul 2018 18:27:43 -0400 Subject: [PATCH 050/138] added openml reference paper to documentation --- doc/datasets/openml.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 3702ed573fc03..16fc18e6cd2fb 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -145,3 +145,11 @@ You can also specify both the name and the version, which also uniquely identifi .. >>> import shutil >>> shutil.rmtree(custom_data_home) + + +.. topic:: References: + + * Vanschoren, van Rijn, Bischl and Torgo + `"OpenML: networked science in machine learning" + `_, + ACM SIGKDD Explorations Newsletter, 15(2), 49-60, 2014. From 579d10e0f9eea076b15efe16ae4cb76d94df5cc6 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sun, 15 Jul 2018 19:10:05 -0400 Subject: [PATCH 051/138] suggestions by @amueller --- doc/developers/contributing.rst | 2 +- doc/whats_new/v0.20.rst | 2 +- setup.cfg | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/developers/contributing.rst b/doc/developers/contributing.rst index 4c9791bc7e681..48f5b0429dd8f 100644 --- a/doc/developers/contributing.rst +++ b/doc/developers/contributing.rst @@ -79,7 +79,7 @@ link to it from your website, or simply star to say "I use it": * `joblib `__ * `sphinx-gallery `__ * `numpydoc `__ - * `liac-arff ` __ + * `liac-arff `__ and larger projects: diff --git a/doc/whats_new/v0.20.rst b/doc/whats_new/v0.20.rst index 83fb5bdc8dbaa..7b0cae057e5b0 100644 --- a/doc/whats_new/v0.20.rst +++ b/doc/whats_new/v0.20.rst @@ -194,7 +194,7 @@ Datasets - Added :func:`dataset.fetch_openml` to fetch any dataset from `OpenML `. OpenML is a free, open data sharing platform and will replace mldata, which is no longer maintained. :issue:`9908` by `Andreas Müller`_ and :user:`Jan N. van Rijn - `. + `. Enhancements ............ diff --git a/setup.cfg b/setup.cfg index a3ae983153818..b02383bae3b55 100644 --- a/setup.cfg +++ b/setup.cfg @@ -9,7 +9,6 @@ addopts = --disable-pytest-warnings -rs - [wheelhouse_uploader] artifact_indexes= # OSX wheels built by travis (only for specific tags): From 2dc3e2c6e4c60c3c59f6f13d25c9af433946a81c Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 16 Jul 2018 12:03:09 -0400 Subject: [PATCH 052/138] moved liac-arff to general externals directory (for appveyor) --- sklearn/datasets/openml.py | 2 +- sklearn/datasets/tests/test_openml.py | 2 +- sklearn/externals/_liacarff/LICENSE | 19 ------------------- sklearn/externals/_liacarff/__init__.py | 0 sklearn/externals/{_liacarff => }/arff.py | 0 5 files changed, 2 insertions(+), 21 deletions(-) delete mode 100644 sklearn/externals/_liacarff/LICENSE delete mode 100644 sklearn/externals/_liacarff/__init__.py rename sklearn/externals/{_liacarff => }/arff.py (100%) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index a9fec6775fa45..cfcdd9e9a7f5b 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -15,7 +15,7 @@ import numpy as np from .base import get_data_home -from ..externals._liacarff.arff import loads +from sklearn.externals.arff import loads from ..externals.joblib import Memory from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 1006e8310b497..bdbea96bd61f1 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -9,7 +9,7 @@ from sklearn.datasets import fetch_openml from sklearn.utils.testing import (assert_warns_message, assert_raise_message) -from sklearn.externals._liacarff.arff import load +from sklearn.externals.arff import load from sklearn.externals.six.moves.urllib.error import HTTPError diff --git a/sklearn/externals/_liacarff/LICENSE b/sklearn/externals/_liacarff/LICENSE deleted file mode 100644 index 880cc7047e030..0000000000000 --- a/sklearn/externals/_liacarff/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011 Renato de Pontes Pereira, renato.ppontes at gmail dot com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/sklearn/externals/_liacarff/__init__.py b/sklearn/externals/_liacarff/__init__.py deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/sklearn/externals/_liacarff/arff.py b/sklearn/externals/arff.py similarity index 100% rename from sklearn/externals/_liacarff/arff.py rename to sklearn/externals/arff.py From 2659dd96eb1f248490bd4fed13a5350cb498df2c Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 16 Jul 2018 12:39:28 -0400 Subject: [PATCH 053/138] improved docstring based on Joris' comments --- doc/whats_new/v0.20.rst | 2 +- sklearn/datasets/openml.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/whats_new/v0.20.rst b/doc/whats_new/v0.20.rst index 7b0cae057e5b0..5c33650a99958 100644 --- a/doc/whats_new/v0.20.rst +++ b/doc/whats_new/v0.20.rst @@ -191,7 +191,7 @@ Misc Datasets -- Added :func:`dataset.fetch_openml` to fetch any dataset from `OpenML `. +- Added :func:`datasets.fetch_openml` to fetch any dataset from `OpenML `. OpenML is a free, open data sharing platform and will replace mldata, which is no longer maintained. :issue:`9908` by `Andreas Müller`_ and :user:`Jan N. van Rijn `. diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index cfcdd9e9a7f5b..0a609fbf19c29 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -190,11 +190,11 @@ def fetch_openml(id=None, name=None, version='active', data_home=None, used to obtain a dataset. name : string - Identifier of the dataset. If integer, assumed to be the id of the - dataset on OpenML, if string, assumed to be the name of the dataset. + String identifier of the dataset. Note that OpenML can have multiple + datasets with the same name. version : integer or 'active', default='active' - Version of the dataset. Only used if ``name_or_id`` is a string. + Version of the dataset. Can only be provided if also ``name`` is given. If 'active' the oldest version that's still active is used. data_home : string or None, default None From 403576b5567f9dbc898cefba1df60ec6e688006c Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 16 Jul 2018 15:20:28 -0400 Subject: [PATCH 054/138] changed order of arguments --- doc/datasets/openml.rst | 6 +++--- sklearn/datasets/openml.py | 12 ++++++------ sklearn/datasets/tests/test_openml.py | 14 +++++++------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 16fc18e6cd2fb..a679d429527a0 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -72,7 +72,7 @@ to get more information on the dataset on the openml website:: The id is also the most specific way to specify how to fetch a dataset from OpenML:: - >>> mice = fetch_openml(40966, data_home=custom_data_home) + >>> mice = fetch_openml(id=40966, data_home=custom_data_home) >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', 'creator': ..., @@ -113,13 +113,13 @@ has multiple versions:: >>> iris.details['id'] #doctest: +SKIP '61' - >>> iris_61 = fetch_openml(61, data_home=custom_data_home) + >>> iris_61 = fetch_openml(id=61, data_home=custom_data_home) >>> iris_61.details['version'] #doctest: +SKIP '1' >>> iris_61.details['id'] #doctest: +SKIP '61' - >>> iris_969 = fetch_openml(969, data_home=custom_data_home) + >>> iris_969 = fetch_openml(id=969, data_home=custom_data_home) >>> iris_969.details['version'] #doctest: +SKIP '3' >>> iris_969.details['id'] #doctest: +SKIP diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 0a609fbf19c29..89bda1ee5d66f 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -172,7 +172,7 @@ def _convert_numericals(data, name_feature): return data -def fetch_openml(id=None, name=None, version='active', data_home=None, +def fetch_openml(name=None, version='active', id=None, data_home=None, target_column_name='default-target', cache=True): """Fetch dataset from openml by name or dataset id. @@ -184,11 +184,6 @@ def fetch_openml(id=None, name=None, version='active', data_home=None, Parameters ---------- - id : int - OpenML ID of the dataset. The most specific way of retrieving a - dataset. If ID is not given, name (and potential version) are - used to obtain a dataset. - name : string String identifier of the dataset. Note that OpenML can have multiple datasets with the same name. @@ -197,6 +192,11 @@ def fetch_openml(id=None, name=None, version='active', data_home=None, Version of the dataset. Can only be provided if also ``name`` is given. If 'active' the oldest version that's still active is used. + id : int + OpenML ID of the dataset. The most specific way of retrieving a + dataset. If ID is not given, name (and potential version) are + used to obtain a dataset. + data_home : string or None, default None Specify another download and cache folder for the data sets. By default all scikit-learn data is stored in '~/scikit_learn_data' subfolders. diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index bdbea96bd61f1..998d7f7230897 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -35,7 +35,7 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, # will be the same # fetch with dataset id - data_by_id = fetch_openml(data_id, cache=False) + data_by_id = fetch_openml(id=data_id, cache=False) assert data_by_id.details['name'] == data_name assert data_by_id.data.shape == (expected_observations, expected_features) assert data_by_id.target.shape == (expected_observations, ) @@ -210,12 +210,12 @@ def test_fetch_openml_inactive(monkeypatch): _monkey_patch_webbased_functions(monkeypatch, data_id) glas2 = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, - data_id, cache=False) + id=data_id, cache=False) # fetch inactive dataset by name and version assert glas2.data.shape == (163, 9) glas2_by_version = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, - None, "glass2", 1, cache=False) + id=None, name="glass2", version=1, cache=False) assert int(glas2_by_version.details['id']) == data_id @@ -225,18 +225,18 @@ def test_fetch_nonexiting(monkeypatch): data_id = 40675 _monkey_patch_webbased_functions(monkeypatch, data_id) assert_raise_message(ValueError, "No active dataset glass2 found", - fetch_openml, None, 'glass2', cache=False) + fetch_openml, id=None, name='glass2', cache=False) def test_fetch_openml_raises_illegal_argument(): assert_raise_message(ValueError, "Dataset id=", - fetch_openml, -1, "name") + fetch_openml, id=-1, name="name") assert_raise_message(ValueError, "Dataset id=", - fetch_openml, -1, None, "version") + fetch_openml, id=-1, name=None, version="version") assert_raise_message(ValueError, "Dataset id=", - fetch_openml, -1, "name", "version") + fetch_openml, id=-1, name="name", version="version") assert_raise_message(ValueError, "Neither name nor id are provided. " + "Please provide name xor id.", fetch_openml) From 5c65cb77a230bba03e974f5f655ebaab26e26e74 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 16 Jul 2018 18:59:43 -0400 Subject: [PATCH 055/138] openml doc improvements --- doc/datasets/openml.rst | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index a679d429527a0..507a0710bee0e 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -24,19 +24,18 @@ from the repository using the function For example, to download a dataset of gene expressions in mice brains:: >>> from sklearn.datasets import fetch_openml - >>> mice = fetch_openml(name='miceprotein', version=4, data_home=custom_data_home) + >>> mice = fetch_openml(name='miceprotein', version=4) To fully specify a dataset, you need to provide a name and a version, though the version is optional, see :ref:`openml_versions`_ below. The dataset contains a total of 1080 examples belonging to 8 different classes:: - >>> mice.data.shape #doctest: +SKIP + >>> mice.data.shape (1080, 77) - >>> mice.target.shape #doctest: +SKIP + >>> mice.target.shape (1080,) - >>> np.unique(mice.target) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP - array([b"'c-CS-m'", b"'c-CS-s'", b"'c-SC-m'", b"'c-SC-s'", b"'t-CS-m'", - b"'t-CS-s'", b"'t-SC-m'", b"'t-SC-s'"], dtype='|S8') + >>> np.unique(mice.target) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + array(['c-CS-m', 'c-CS-s', 'c-SC-m', 'c-SC-s', 't-CS-m', 't-CS-s', 't-SC-m', 't-SC-s'], dtype=object) You can get more information on the dataset by looking at the ``DESCR`` and ``details`` attributes:: @@ -49,16 +48,15 @@ and ``details`` attributes:: Syndrome. PLoS ONE 10(6): e0129126... >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP - {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', - 'creator': ..., - 'upload_date': '2016-02-17T14:32:49', 'licence': 'Public', 'url': - 'https://www.openml.org/data/v1/download/1804243/MiceProtein.ARFF', 'file_id': - '1804243', 'default_target_attribute': 'class', 'citation': 'Higuera C, - Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins - Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): - e0129126. [Web Link] journal.pone.0129126', 'tag': ['OpenML100', 'study_14', - 'study_34'], 'visibility': 'public', 'status': 'active', 'md5_checksum': - '3c479a6885bfa0438971388283a1ce32'} + {'id': '40966', 'name': 'MiceProtein', 'version': '4', 'format': 'ARFF', + 'upload_date': '2017-11-08T16:00:15', 'licence': 'Public', + 'url': 'https://www.openml.org/data/v1/download/17928620/MiceProtein.arff', + 'file_id': '17928620', 'default_target_attribute': 'class', + 'row_id_attribute': 'MouseID', + 'ignore_attribute': ['Genotype', 'Treatment', 'Behavior'], + 'tag': ['OpenML-CC18', 'study_135', 'study_98', 'study_99'], + 'visibility': 'public', 'status': 'active', + 'md5_checksum': '3c479a6885bfa0438971388283a1ce32'} The ``DESCR`` contains a free-text description of the data, while ``details`` From f8cf13f0228051d2e28f603fbcac6b1825bee48b Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 16 Jul 2018 19:06:15 -0400 Subject: [PATCH 056/138] improved doc+tests --- doc/datasets/openml.rst | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 507a0710bee0e..1d8c916dc9e5c 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -3,10 +3,6 @@ >>> import numpy as np >>> import os - >>> import tempfile - >>> # Create a temporary folder for the data fetcher - >>> custom_data_home = tempfile.mkdtemp() - >>> os.makedirs(os.path.join(custom_data_home, 'openml')) .. _openml: @@ -70,7 +66,7 @@ to get more information on the dataset on the openml website:: The id is also the most specific way to specify how to fetch a dataset from OpenML:: - >>> mice = fetch_openml(id=40966, data_home=custom_data_home) + >>> mice = fetch_openml(id=40966) >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', 'creator': ..., @@ -105,22 +101,22 @@ of the "miceprotein" dataset:: In fact, this dataset only has one version. The iris dataset on the other hand has multiple versions:: - >>> iris = fetch_openml(name="iris", data_home=custom_data_home) + >>> iris = fetch_openml(name="iris") >>> iris.details['version'] #doctest: +SKIP '1' >>> iris.details['id'] #doctest: +SKIP '61' - >>> iris_61 = fetch_openml(id=61, data_home=custom_data_home) - >>> iris_61.details['version'] #doctest: +SKIP + >>> iris_61 = fetch_openml(id=61) + >>> iris_61.details['version'] '1' - >>> iris_61.details['id'] #doctest: +SKIP + >>> iris_61.details['id'] '61' - >>> iris_969 = fetch_openml(id=969, data_home=custom_data_home) - >>> iris_969.details['version'] #doctest: +SKIP + >>> iris_969 = fetch_openml(id=969) + >>> iris_969.details['version'] '3' - >>> iris_969.details['id'] #doctest: +SKIP + >>> iris_969.details['id'] '969' Specifying the dataset by the name "iris" yields the lowest version, version 1, with the id 61. @@ -128,23 +124,18 @@ To make sure you always get this exact dataset, it is safest to specify it by th The other dataset, with id 969, is version 3 (version 2 has become inactive), and contains a binarized version of the data:: - >>> np.unique(iris_969.target) #doctest: +SKIP - array([b'N', b'P'], - dtype='|S1') + >>> np.unique(iris_969.target) + array(['N', 'P'], dtype=object) -You can also specify both the name and the version, which also uniquely identifies the dataset:: - >>> iris_version_3 = fetch_openml(name="iris", version=3, data_home=custom_data_home) +You can also specify both the name and the version, which also uniquely identifies the dataset:: + + >>> iris_version_3 = fetch_openml(name="iris", version=3) >>> iris_version_3.details['version'] '3' >>> iris_version_3.details['id'] '969' -.. - >>> import shutil - >>> shutil.rmtree(custom_data_home) - - .. topic:: References: * Vanschoren, van Rijn, Bischl and Torgo From bf10a86f1fc77a2d9db36e29b1458937a015b6a0 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 16 Jul 2018 19:13:04 -0400 Subject: [PATCH 057/138] code improvements requested by Joris --- sklearn/datasets/openml.py | 2 +- sklearn/datasets/tests/test_openml.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 89bda1ee5d66f..43eaac5b8c315 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -253,7 +253,7 @@ def mem(func): data_id = id else: raise ValueError( - "Neither name nor id are provided. Please provide name xor id.") + "Neither name nor id are provided. Please provide name or id.") data_description = _get_data_description_by_id_(data_id) if data_description['status'] != "active": diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 998d7f7230897..924e82653219c 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -201,6 +201,7 @@ def test_fetch_openml_miceprotein(monkeypatch): # stored in data.target) assert (data.data.shape == (expected_observations, expected_features)) assert (data.target.shape == (expected_observations, )) + assert (data.data.dtype == np.float64) def test_fetch_openml_inactive(monkeypatch): @@ -239,4 +240,4 @@ def test_fetch_openml_raises_illegal_argument(): fetch_openml, id=-1, name="name", version="version") assert_raise_message(ValueError, "Neither name nor id are provided. " + - "Please provide name xor id.", fetch_openml) + "Please provide name or id.", fetch_openml) From 6d4bd90b56ef83efac5e169d01153c1f5baf92c1 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 16 Jul 2018 19:24:35 -0400 Subject: [PATCH 058/138] doc fixes addressing review comments --- doc/datasets/openml.rst | 11 ++++++----- doc/whats_new/v0.20.rst | 15 ++++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 1d8c916dc9e5c..3ffb17f82be02 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -13,7 +13,7 @@ Downloading datasets from the openml.org repository `openml.org `_ is a public repository for machine learning data and experiments, that allows everybody to upload open datasets. -The ``sklearn.datasets`` package is able to directly download datasets +The ``sklearn.datasets`` package is able to download datasets from the repository using the function :func:`sklearn.datasets.fetch_openml`. @@ -37,8 +37,8 @@ You can get more information on the dataset by looking at the ``DESCR`` and ``details`` attributes:: >>> print(mice.DESCR) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP - **Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios - **Source**: [UCI](https://archive.ics.uci.edu/ml/datasets/Mice+Protein+Expression) - 2015 + **Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios + **Source**: [UCI](https://archive.ics.uci.edu/ml/datasets/Mice+Protein+Expression) - 2015 **Please cite**: Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): e0129126... @@ -57,11 +57,12 @@ and ``details`` attributes:: The ``DESCR`` contains a free-text description of the data, while ``details`` contains a dictionary of meta-data stored by openml, like the dataset id. +For more details, see the `OpenML documentation `_ The id of the mice protein dataset is 40966, and you can use this (or the name) to get more information on the dataset on the openml website:: - >>> print(mice.url) - https://www.openml.org/d/40966 + >>> mice.url + 'https://www.openml.org/d/40966' The id is also the most specific way to specify how to fetch a dataset from OpenML:: diff --git a/doc/whats_new/v0.20.rst b/doc/whats_new/v0.20.rst index 5c33650a99958..20a6926295955 100644 --- a/doc/whats_new/v0.20.rst +++ b/doc/whats_new/v0.20.rst @@ -99,6 +99,9 @@ Classifiers and regressors - :class:`dummy.DummyRegressor` now has a ``return_std`` option in its ``predict`` method. The returned standard deviations will be zeros. +- Added :class:`multioutput.RegressorChain` for multi-target + regression. :issue:`9257` by :user:`Kumar Ashutosh `. + - Added :class:`naive_bayes.ComplementNB`, which implements the Complement Naive Bayes classifier described in Rennie et al. (2003). :issue:`8190` by :user:`Michael A. Alcorn `. @@ -108,9 +111,6 @@ Classifiers and regressors wrapping pipelines that perform their own imputation. :issue:`9707` by :user:`Jimmy Wan `. -- Added :class:`multioutput.RegressorChain` for multi-target - regression. :issue:`9257` by :user:`Kumar Ashutosh `. - Preprocessing @@ -191,10 +191,11 @@ Misc Datasets -- Added :func:`datasets.fetch_openml` to fetch any dataset from `OpenML `. - OpenML is a free, open data sharing platform and will replace mldata, which - is no longer maintained. :issue:`9908` by `Andreas Müller`_ and :user:`Jan N. van Rijn - `. +- Added :func:`datasets.fetch_openml` to fetch datasets from `OpenML `. + +OpenML is a free, open data sharing platform and will be used instead of mldata +as it provides better service availability. :issue:`9908` by `Andreas Müller`_ +and :user:`Jan N. van Rijn `. Enhancements ............ From 3f8128a0665171a1e73ac7370b4c7f246fbdecd6 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 01:35:04 -0400 Subject: [PATCH 059/138] incorporated many suggestions from the code review: - better mocking structure - id keyword replaced by data_id - factorization of json url loading --- doc/datasets/openml.rst | 22 ++--- sklearn/datasets/openml.py | 112 ++++++++++++++++---------- sklearn/datasets/tests/test_openml.py | 91 ++++++++++++--------- 3 files changed, 132 insertions(+), 93 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 3ffb17f82be02..fa649c588d720 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -58,16 +58,16 @@ and ``details`` attributes:: The ``DESCR`` contains a free-text description of the data, while ``details`` contains a dictionary of meta-data stored by openml, like the dataset id. For more details, see the `OpenML documentation `_ -The id of the mice protein dataset is 40966, and you can use this (or the name) -to get more information on the dataset on the openml website:: +The ``data_id`` of the mice protein dataset is 40966, and you can use this (or +the name) to get more information on the dataset on the openml website:: >>> mice.url 'https://www.openml.org/d/40966' -The id is also the most specific way to specify how to fetch a dataset from +The ``data_id`` is also the most specific way to specify how to fetch a dataset from OpenML:: - >>> mice = fetch_openml(id=40966) + >>> mice = fetch_openml(data_id=40966) >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP {'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF', 'creator': ..., @@ -85,7 +85,7 @@ OpenML:: Dataset Versions ---------------- -A dataset is uniquely specified by its id, but not necessarily by its name. +A dataset is uniquely specified by its ``data_id``, but not necessarily by its name. Several different "versions" of a dataset with the same name can exist which can contain entirely different datasets. If a particular version of a dataset has been found to contain significant @@ -93,7 +93,7 @@ issues, it might be inactivated. Using a name to specify a dataset will yield the earliest version of a dataset that is still active. That means that ``fetch_openml(name="miceprotein")`` can yield different results at different times if earlier versions become inactive. -You can see that the dataset with id 40966 that we fetched above is the version 1 +You can see that the dataset with ``data_id`` 40966 that we fetched above is the version 1 of the "miceprotein" dataset:: >>> mice.details['version'] #doctest: +SKIP @@ -108,21 +108,21 @@ has multiple versions:: >>> iris.details['id'] #doctest: +SKIP '61' - >>> iris_61 = fetch_openml(id=61) + >>> iris_61 = fetch_openml(data_id=61) >>> iris_61.details['version'] '1' >>> iris_61.details['id'] '61' - >>> iris_969 = fetch_openml(id=969) + >>> iris_969 = fetch_openml(data_id=969) >>> iris_969.details['version'] '3' >>> iris_969.details['id'] '969' -Specifying the dataset by the name "iris" yields the lowest version, version 1, with the id 61. -To make sure you always get this exact dataset, it is safest to specify it by the dataset id. -The other dataset, with id 969, is version 3 (version 2 has become inactive), and contains +Specifying the dataset by the name "iris" yields the lowest version, version 1, with the ``data_id`` 61. +To make sure you always get this exact dataset, it is safest to specify it by the dataset ``data_id``. +The other dataset, with ``data_id`` 969, is version 3 (version 2 has become inactive), and contains a binarized version of the data:: >>> np.unique(iris_969.target) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 43eaac5b8c315..9a368b3bd1fb4 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -25,8 +25,56 @@ _DATA_FEATURES = "https://openml.org/api/v1/json/data/features/{}" +def _get_json_content_from_openml_api(url, error_message, raise_if_error): + """ + Loads json data from the openml api + + Parameters + ---------- + url : str + The URL to load from. Should be an official OpenML endpoint + + error_message : str + The error message to raise if an acceptable OpenML error is thrown + (acceptable error is, e.g., data id not found. Other errors, like 404's + will throw the native error message) + + raise_if_error : bool + Whether to raise an error if OpenML returns an acceptable error (e.g., + date not found). If this argument is set to False, a None is returned in + case of acceptable errors. Note that all other errors (e.g., 404) will + still be raised as normal. + + Returns + ------- + json_data : json or None + the json result from the OpenML server if the call was successful; + None otherwise iff raise_if_error was set to False and the error was + ``acceptable`` + """ + data_found = True + try: + response = urlopen(url) + except HTTPError as error: + # 412 is an OpenML specific error code, indicating a generic error + # (e.g., data not found) + if error.code == 412: + data_found = False + else: + raise error + if not data_found: + # not in except for nicer traceback + if raise_if_error: + raise ValueError(error_message) + else: + return None + json_data = json.loads(response.read().decode("utf-8")) + response.close() + return json_data + + def _openml_fileid_url(file_id): - return "https://www.openml.org/data/v1/download/{}/".format(file_id) + return "https://openml.org/data/v1/download/{}/".format(file_id) def _convert_arff_data(arff_data): @@ -116,38 +164,16 @@ def _get_data_info_by_name(name, version): def _get_data_description_by_id(data_id): - data_found = True - try: - response = urlopen(_DATA_INFO.format(data_id)) - except HTTPError as error: - if error.code == 412: - data_found = False - if not data_found: - # not in except for nicer traceback - raise ValueError("Dataset with id {} " - "not found.".format(data_id)) - json_data = json.loads(response.read().decode("utf-8")) - response.close() + url = _DATA_INFO.format(data_id) + error_message = "Dataset with id {} not found.".format(data_id) + json_data = _get_json_content_from_openml_api(url, error_message, True) return json_data['data_set_description'] def _get_data_features(data_id): - data_found = True - try: - response = urlopen(_DATA_FEATURES.format(data_id)) - except HTTPError as error: - # 412 is an OpenML specific error code, indicating a generic error - # (e.g., data not found) - if error.code == 412: - data_found = False - else: - raise error - if not data_found: - # not in except for nicer traceback - raise ValueError("Dataset with id {} " - "not found.".format(data_id)) - json_data = json.loads(response.read().decode("utf-8")) - response.close() + url = _DATA_FEATURES.format(data_id) + error_message = "Dataset with id {} not found.".format(data_id) + json_data = _get_json_content_from_openml_api(url, error_message, True) return json_data['data_features']['feature'] @@ -172,7 +198,7 @@ def _convert_numericals(data, name_feature): return data -def fetch_openml(name=None, version='active', id=None, data_home=None, +def fetch_openml(name=None, version='active', data_id=None, data_home=None, target_column_name='default-target', cache=True): """Fetch dataset from openml by name or dataset id. @@ -192,9 +218,9 @@ def fetch_openml(name=None, version='active', id=None, data_home=None, Version of the dataset. Can only be provided if also ``name`` is given. If 'active' the oldest version that's still active is used. - id : int + data_id : int OpenML ID of the dataset. The most specific way of retrieving a - dataset. If ID is not given, name (and potential version) are + dataset. If data_id is not given, name (and potential version) are used to obtain a dataset. data_home : string or None, default None @@ -235,25 +261,27 @@ def mem(func): if not exists(data_home): os.makedirs(data_home) - # check legal function arguments. id XOR (name, version) should be provided + # check legal function arguments. data_id XOR (name, version) should be + # provided if name is not None: - if id is not None: + if data_id is not None: raise ValueError( - "Dataset id={} and name={} passed, but you can only " - "specify a numeric id or a name, not both.".format(id, name)) + "Dataset data_id={} and name={} passed, but you can only " + "specify a numeric data_id or a name, not both.".format(data_id, + name)) data_info = _get_data_info_by_name_(name, version) data_id = data_info['did'] - elif id is not None: + elif data_id is not None: # from the previous if statement, it is given that name is None if version is not "active": raise ValueError( - "Dataset id={} and version={} passed, but you can only " - "specify a numeric id or a version, not both.".format(id, - name)) - data_id = id + "Dataset data_id={} and version={} passed, but you can only " + "specify a numeric data_id or a version, not " + "both.".format(data_id, name)) else: raise ValueError( - "Neither name nor id are provided. Please provide name or id.") + "Neither name nor data_id are provided. Please provide name or " + "data_id.") data_description = _get_data_description_by_id_(data_id) if data_description['status'] != "active": diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 924e82653219c..1b987ab3bede5 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -7,9 +7,9 @@ import sklearn from sklearn.datasets import fetch_openml +from sklearn.datasets.openml import _get_data_features from sklearn.utils.testing import (assert_warns_message, assert_raise_message) -from sklearn.externals.arff import load from sklearn.externals.six.moves.urllib.error import HTTPError @@ -35,7 +35,7 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, # will be the same # fetch with dataset id - data_by_id = fetch_openml(id=data_id, cache=False) + data_by_id = fetch_openml(data_id=data_id, cache=False) assert data_by_id.details['name'] == data_name assert data_by_id.data.shape == (expected_observations, expected_features) assert data_by_id.target.shape == (expected_observations, ) @@ -44,11 +44,10 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, else: assert isinstance(data_by_id.data, np.ndarray) - # check numeric features. Be sure to call to the mocked version, because - # urlopen is also mocked. + # check numeric features. Note that the response of _get_data_features is + # mocked too. feature_name_type = {feature['name']: feature['data_type'] - for feature in - sklearn.datasets.openml._get_data_features(data_id)} + for feature in _get_data_features(data_id)} for idx, feature_name in enumerate(data_by_id.feature_names): if feature_name_type[feature_name] == 'numeric': # casting trick according to Jaime at @@ -67,31 +66,37 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, def _monkey_patch_webbased_functions(context, data_id): testdir_path = os.path.dirname(os.path.realpath(__file__)) + url_prefix_data_description = "https://openml.org/api/v1/json/data/" + url_prefix_data_features = "https://openml.org/api/v1/json/data/features/" + url_prefix_download_data = "https://openml.org/data/v1/" + url_prefix_data_list = "https://openml.org/api/v1/json/data/list/" + + def _mock_urlopen_data_description(url): + assert (url.startswith(url_prefix_data_description)) - def _mock_data_description(id): path = os.path.join(testdir_path, - 'mock_openml/%d/data_description.json' % id) - description = open(path, 'r').read() - return json.loads(description)['data_set_description'] + 'mock_openml/%d/data_description.json' % data_id) + return urlopen('file://' + path) + + def _mock_urlopen_data_features(url): + assert (url.startswith(url_prefix_data_features)) - def _mock_data_features(id): path = os.path.join(testdir_path, - 'mock_openml/%d/data_features.json' % id) - features = open(path, 'r').read() - return json.loads(features)['data_features']['feature'] + 'mock_openml/%d/data_features.json' % data_id) + return urlopen('file://' + path) + + def _mock_urlopen_download_data(url): + assert (url.startswith(url_prefix_download_data)) - def _mock_download_data(_): path = os.path.join(testdir_path, 'mock_openml/%d/data.arff' % data_id) - arff_fp = open(path, 'r').read() - return load(arff_fp) + return urlopen('file://' + path) - def _mock_urlopen(url): + def _mock_urlopen_data_list(url): # url contains key value pairs of attributes, e.g., # openml.org/api/v1/json/data_name/iris/data_version/1 should # ideally become {data_name: 'iris', data_version: '1'} - api_prefix = "https://openml.org/api/v1/json/data/list/" - assert(url.startswith(api_prefix)) - att_list = url[len(api_prefix):].split('/') + assert(url.startswith(url_prefix_data_list)) + att_list = url[len(url_prefix_data_list):].split('/') key_val_dict = dict(zip(att_list[::2], att_list[1::2])) # add defaults, so we can make assumptions about the content if 'data_version' not in key_val_dict: @@ -111,14 +116,19 @@ def _mock_urlopen(url): hdrs=None, fp=None) return urlopen('file://' + json_file_path) - context.setattr(sklearn.datasets.openml, - '_get_data_description_by_id', - _mock_data_description) - context.setattr(sklearn.datasets.openml, - '_get_data_features', - _mock_data_features) - context.setattr(sklearn.datasets.openml, '_download_data', - _mock_download_data) + def _mock_urlopen(url): + if url.startswith(url_prefix_data_list): + return _mock_urlopen_data_list(url) + elif url.startswith(url_prefix_data_features): + return _mock_urlopen_data_features(url) + elif url.startswith(url_prefix_download_data): + return _mock_urlopen_download_data(url) + elif url.startswith(url_prefix_data_description): + return _mock_urlopen_data_description(url) + else: + raise ValueError('Unknown mocking URL pattern (this should never ' + + 'happen): %s' % url) + context.setattr(sklearn.datasets.openml, 'urlopen', _mock_urlopen) @@ -211,12 +221,12 @@ def test_fetch_openml_inactive(monkeypatch): _monkey_patch_webbased_functions(monkeypatch, data_id) glas2 = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, - id=data_id, cache=False) + data_id=data_id, cache=False) # fetch inactive dataset by name and version assert glas2.data.shape == (163, 9) glas2_by_version = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, - id=None, name="glass2", version=1, cache=False) + data_id=None, name="glass2", version=1, cache=False) assert int(glas2_by_version.details['id']) == data_id @@ -226,18 +236,19 @@ def test_fetch_nonexiting(monkeypatch): data_id = 40675 _monkey_patch_webbased_functions(monkeypatch, data_id) assert_raise_message(ValueError, "No active dataset glass2 found", - fetch_openml, id=None, name='glass2', cache=False) + fetch_openml, data_id=None, name='glass2', cache=False) def test_fetch_openml_raises_illegal_argument(): - assert_raise_message(ValueError, "Dataset id=", - fetch_openml, id=-1, name="name") + assert_raise_message(ValueError, "Dataset data_id=", + fetch_openml, data_id=-1, name="name") - assert_raise_message(ValueError, "Dataset id=", - fetch_openml, id=-1, name=None, version="version") + assert_raise_message(ValueError, "Dataset data_id=", + fetch_openml, data_id=-1, name=None, version="version") - assert_raise_message(ValueError, "Dataset id=", - fetch_openml, id=-1, name="name", version="version") + assert_raise_message(ValueError, "Dataset data_id=", + fetch_openml, data_id=-1, name="name", + version="version") - assert_raise_message(ValueError, "Neither name nor id are provided. " + - "Please provide name or id.", fetch_openml) + assert_raise_message(ValueError, "Neither name nor data_id are provided. " + + "Please provide name or data_id.", fetch_openml) From 7ee5329da040e2e42b2e21be11db02f087967a9c Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 01:55:21 -0400 Subject: [PATCH 060/138] final touch on json load factorization small improvements with file api and fn names small improvements in comments --- sklearn/datasets/openml.py | 75 ++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 43 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 9a368b3bd1fb4..1342f7eface7a 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -23,6 +23,7 @@ _SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" _DATA_INFO = "https://openml.org/api/v1/json/data/{}" _DATA_FEATURES = "https://openml.org/api/v1/json/data/features/{}" +_DATA_FILE = "https://openml.org/data/v1/download/{}" def _get_json_content_from_openml_api(url, error_message, raise_if_error): @@ -73,10 +74,6 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error): return json_data -def _openml_fileid_url(file_id): - return "https://openml.org/data/v1/download/{}/".format(file_id) - - def _convert_arff_data(arff_data): """ converts the arff object into the appropriate matrix type (now: np.ndarray, @@ -88,7 +85,10 @@ def _convert_arff_data(arff_data): arff_data : list or dict as obtained from liac-arff object - returns : np.ndarray (or later also: scipy.sparse.csr_matrix) + Returns + ------- + X : np.ndarray + (or later also: scipy.sparse.csr_matrix) """ if isinstance(arff_data, list): X = np.array(arff_data, dtype=object) @@ -124,46 +124,31 @@ def _get_data_info_by_name(name, version): search criteria """ - data_found = True - try: - if version == "active": - response = urlopen(_SEARCH_NAME.format(name) + "/status/active/") - else: - response = urlopen((_SEARCH_NAME + - "/data_version/{}").format(name, version)) - except HTTPError as error: - if error.code == 412: - data_found = False - else: - raise error - - if not data_found and version != "active": - # might have been deactivated. will warn later - data_found = True - try: - url = (_SEARCH_NAME + - "/data_version/{}/status/deactivated").format(name, version) - response = urlopen(url) - except HTTPError as error: - # 412 is an OpenML specific error code, indicating a generic error - # (e.g., data not found) - if error.code == 412: - data_found = False - else: - raise error + if version == "active": + # situation in which we return the oldest active version + url = _SEARCH_NAME.format(name) + "/status/active/" + error_msg = "No active dataset {} found.".format(name) + json_data = _get_json_content_from_openml_api(url, error_msg, True) + return json_data['data']['dataset'][0] + + # an integer version has been provided + url = (_SEARCH_NAME + "/data_version/{}").format(name, version) + json_data = _get_json_content_from_openml_api(url, None, False) + if json_data is None: + # we can do this in 1 fn call if OpenML does not require the + # specification of the dataset status (i.e., return datasets with a + # given name / version regardless of active, deactivated, etc. ) + # TODO: feature request OpenML. + url += "/status/deactivated" + error_msg = "Dataset {} with version {} not found.".format(name, + version) + json_data = _get_json_content_from_openml_api(url, error_msg, True) - if not data_found: - # not in except for nicer traceback - if version == "active": - raise ValueError("No active dataset {} found.".format(name)) - raise ValueError("Dataset {} with version {}" - " not found.".format(name, version)) - - json_data = json.loads(response.read().decode("utf-8")) return json_data['data']['dataset'][0] def _get_data_description_by_id(data_id): + # OpenML API fn: https://www.openml.org/api_docs#!/data/get_data_id url = _DATA_INFO.format(data_id) error_message = "Dataset with id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True) @@ -171,14 +156,17 @@ def _get_data_description_by_id(data_id): def _get_data_features(data_id): + # OpenML API fn: https://www.openml.org/api_docs#!/data/get_data_features_id url = _DATA_FEATURES.format(data_id) error_message = "Dataset with id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True) return json_data['data_features']['feature'] -def _download_data(file_id): - url = _openml_fileid_url(file_id) +def _download_data_arff(file_id): + # Accesses an ARFF file on the OpenML server. Documentation: + # https://www.openml.org/api_data_docs#!/data/get_download_id + url = _DATA_FILE.format(file_id) response = urlopen(url) if sys.version_info[0] == 2: # Python2.7 numpy can't handle unicode? @@ -191,6 +179,7 @@ def _download_data(file_id): def _convert_numericals(data, name_feature): + # converts all numerical columns into floats for feature in name_feature.values(): if feature['data_type'] == "numeric": idx = int(feature['index']) @@ -256,7 +245,7 @@ def mem(func): _get_data_info_by_name_ = mem(_get_data_info_by_name) _get_data_description_by_id_ = mem(_get_data_description_by_id) _get_data_features_ = mem(_get_data_features) - _download_data_ = mem(_download_data) + _download_data_ = mem(_download_data_arff) if not exists(data_home): os.makedirs(data_home) From aedfefda56a83a70c18cf980d09d5a0c65c940b7 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 02:07:46 -0400 Subject: [PATCH 061/138] more replies to reviews --- sklearn/datasets/openml.py | 7 +- .../datasets/tests/mock_openml/2/data.arff | 894 +----------------- .../datasets/tests/mock_openml/292/data.arff | 606 +----------- .../tests/mock_openml/40966/data.arff | 2 +- sklearn/datasets/tests/test_openml.py | 13 +- 5 files changed, 15 insertions(+), 1507 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 1342f7eface7a..965be73378df8 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -20,6 +20,9 @@ from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch +__all__ = ['fetch_openml'] + + _SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" _DATA_INFO = "https://openml.org/api/v1/json/data/{}" _DATA_FEATURES = "https://openml.org/api/v1/json/data/features/{}" @@ -94,8 +97,8 @@ def _convert_arff_data(arff_data): X = np.array(arff_data, dtype=object) # elif: extendable for sparse arff in future () else: - raise ValueError('Unexpected Data Type obtained from arff ' + - '(This should never happen).') + # This should never happen + raise ValueError('Unexpected Data Type obtained from arff.') return X diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff b/sklearn/datasets/tests/mock_openml/2/data.arff index 401cb5e724ba2..2f8010c3798cc 100644 --- a/sklearn/datasets/tests/mock_openml/2/data.arff +++ b/sklearn/datasets/tests/mock_openml/2/data.arff @@ -169,896 +169,4 @@ ?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,1320,0,?,0,?,3 ?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 ?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,4880,Y,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,150,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,761,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,4,1320,762,?,0,?,3 -?,C,A,10,0,?,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.201,600,0,?,0,?,U -?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4170,Y,0,?,U -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320.1,762,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.501,1200.1,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,761,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,610,0,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,50,0,?,0,?,U -?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 -?,C,A,3,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,610,0,?,0,?,1 -?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1320,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.8,356,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4170,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,900,0,?,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,500,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,5 -?,C,?,0,45,?,S,?,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.4,1320,4170,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,450,0,?,0,?,U -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.75,1320,4880,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1220,0,?,0,?,5 -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.399,1320,0,?,0,?,3 -?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.651,20,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,374.9,4880,?,0,?,3 -ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,50,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,Y,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,762,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.799,20,0,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,301,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,610,4880,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,4880,?,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,1274.9,0,?,500,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,N,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,762,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,761,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,762,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,150,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,374.9,4880,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,610,762,Y,0,?,3 -?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,762,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,762,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,4880,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,762,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.301,610,0,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,762,?,0,?,U -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,500,762,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,515,610,Y,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,611,?,0,?,5 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,762,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,20,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,250,0,?,0,?,5 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.801,610,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.5,610,0,?,600,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,762,Y,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,1300,0,?,0,?,3 -?,C,A,4,0,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,1130,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609,612,?,0,?,3 -?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,609.9,4880,?,0,?,2 -?,C,A,0,0,?,S,3,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,1320,0,?,0,?,3 -ZS,C,A,0,70,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2,1250,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,4880,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,762,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,1,?,0,?,2 -?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 -ZS,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,640,0,?,600,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,4880,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,3,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1090,0,?,0,?,2 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,610,0,?,0,?,5 -?,C,A,10,0,?,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,1320,0,?,0,?,U -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320.1,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.5,640,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,609.9,4880,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,761,?,0,?,5 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,4880,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,612,?,0,?,2 -?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,610,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,761,?,0,?,3 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,25,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,SHEET,0.5,1220,4880,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,762,?,0,?,3 -?,C,?,0,0,T,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,761,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 -?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1100,762,?,0,?,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1090,0,?,0,?,2 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,Y,0,?,U -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,520,4880,?,0,?,3 -ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.25,20,0,?,0,?,3 -?,C,S,0,0,?,?,?,400,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,V,?,?,?,?,COIL,0.8,75,0,?,0,?,1 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,4880,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 -?,C,A,4,0,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,1130,0,?,0,?,3 -?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.451,1320,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.6,1220,0,?,0,?,5 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.599,1275,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,5 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.599,610,0,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,4170,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,1220,0,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,762,?,0,?,2 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,1525,0,?,0,?,2 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.1,900,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1525,612,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.5,610,0,?,600,?,3 -?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,5 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,610,4880,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,50,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,760,N,0,?,3 -?,C,R,0,0,?,A,3,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.4,58,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1250,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,830,881,?,0,?,2 -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,1320,0,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2,1525,0,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,520,762,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.8,710.1,0,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 -?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,1000,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,N,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.201,1000,0,?,600,?,U -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,1220,4880,?,0,?,5 -ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,75,0,?,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1220,0,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.7,1320,0,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,610,1000,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,966.1,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,610,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,375,612,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,5 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1320,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,1220,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,50,0,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,4170,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,1250,4880,N,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,1274.9,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,1,?,0,?,2 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,U -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.6,50,0,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,1320,0,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,610,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,762,?,0,?,3 -ZS,C,R,0,0,?,?,?,300,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,COIL,0.8,915.1,0,?,0,?,1 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,1000,0,?,600,?,U -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,640,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,612,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,1320,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,20,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,520,4880,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,3,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,610,762,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,1250,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,762,N,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.901,966.1,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,595,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1220,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609.9,4880,?,0,?,3 -?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1000,4880,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,60,0,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,900,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,3,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,2.3,900,0,?,500,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1300,762,?,0,?,2 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,1320,4880,Y,0,?,3 -?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,762,?,0,?,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.3,1090,0,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,520,4880,?,0,?,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.9,610,1220,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,762,?,0,?,3 -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.399,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,761,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,N,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1220,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,610,761,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,400,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,612,?,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.5,609.9,612,?,0,?,5 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.301,1320,0,?,0,?,3 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,640,0,?,500,?,3 -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,762,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.6,249.9,0,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.9,1135,0,?,600,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,762,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.901,966,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,75,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,1250,762,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,609,0,?,0,?,3 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.6,20,0,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,900,0,?,0,?,3 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,762,?,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.5,250,0,?,0,?,5 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,50,0,?,0,?,5 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,1274.9,762,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,255.1,270,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1500,4170,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,20,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.7,1320,0,?,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1220,4880,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1220,762,?,0,?,U -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,610,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,610,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.321,610,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.601,1220,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,150,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1220,762,?,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,250,0,?,0,?,5 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1220,0,Y,0,?,U -?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,762,?,0,?,2 -?,C,S,0,0,?,?,?,400,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,1 -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,4170,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,761,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,4880,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,150,762,?,0,?,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.299,1050,1220,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,4880,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,375,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,1220,0,?,0,?,3 -?,C,S,0,0,?,?,?,400,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,75,0,?,0,?,1 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,610,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,762,?,0,?,3 -?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.8,50,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,762,?,0,?,2 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.5,609.9,3000,?,0,?,5 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,SHEET,1,610,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.601,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.301,610,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,612,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1500,4170,?,0,?,2 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.201,50,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.75,610,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,374.9,762,?,0,?,3 -?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,900,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,150,762,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,2.2,900,0,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,A,4,0,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,25,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,3,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,4880,?,0,?,2 -?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,N,0,?,3 -?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,761,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,?,0,?,3 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,900,0,?,600,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,300.1,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,300.1,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,610,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,762,?,0,?,U -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.601,609.9,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,300,?,0,?,3 -ZS,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1220,0,?,0,3,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1220,4880,?,0,?,U -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1220,761,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,?,0,?,3 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,S,0,0,?,?,?,400,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,75,0,?,0,?,1 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,1320,0,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1250,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,1320,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320.1,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.201,385.1,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,500,4880,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,500,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4170,?,0,?,2 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,5 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1300,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,50,0,?,0,?,3 -?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.5,29,0,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,595,762,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,1200,611,?,0,?,U -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,355,0,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,610,0,?,500,?,U -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609.9,0,?,0,?,3 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,900,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,1000,0,?,600,?,3 -ZS,C,R,0,0,?,?,?,300,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,COIL,0.8,915,0,?,0,?,1 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.201,610,0,?,600,?,U -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,1320,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,5 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.7,610,0,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,0,?,0,?,U -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,500,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.5,609.9,612,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1500,612,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,4880,?,0,?,2 -?,C,A,0,0,?,S,3,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,1320,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.8,900.1,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,385.1,0,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1300,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,375,612,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,?,0,3,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,1220,0,Y,0,?,U -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,610,0,?,0,?,2 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,N,0,?,3 -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,609.9,0,?,0,?,3 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,610,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,612,?,0,?,3 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,900,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1500,612,?,0,?,2 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,20,0,?,0,?,2 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,900,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,1220,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,612,?,0,?,2 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,762,?,0,?,3 -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,4880,?,0,?,2 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,612,?,0,?,2 -?,C,S,0,0,?,?,?,700,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,609.9,0,?,0,?,1 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.9,1050,1220,?,0,?,2 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,75,0,?,0,?,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.3,1090,0,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,20,0,?,0,?,3 -?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,B,?,?,?,?,SHEET,2,609.9,301,?,0,?,2 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,610,0,Y,0,?,U -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.799,249.9,0,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,Y,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.599,1320,761,?,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,610,0,?,0,?,3 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,900,0,?,0,?,3 -?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,762,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,4880,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.301,20,0,?,0,?,3 -ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,335,612,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,Y,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1220,761,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.09,900,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,255.1,269,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,600,150,?,0,?,U -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,762,N,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,831.9,881,?,0,?,2 -ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,20,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.321,610,0,?,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1275,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1220,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,595,762,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.2,900,0,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.201,50,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,335,3000,?,0,?,2 -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.4,1310,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,610,0,?,600,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,SHEET,0.5,610,762,?,0,?,5 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,2.8,610,0,?,600,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,1300,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1500,612,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,4170,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.201,152,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,1320,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,4880,N,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 -?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,612,Y,0,?,U -?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1525,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,4170,?,0,?,2 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,20,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1300,762,?,0,?,2 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,610,300,?,0,?,5 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,Y,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,610,0,?,600,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.451,20,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1500,4170,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,761,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.201,1320,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,300.1,762,?,0,?,3 -?,C,A,4,0,T,?,?,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,25,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.5,1000,0,?,600,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,4880,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.3,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,609.9,612,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4170,?,0,?,3 -?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,610,0,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,385.1,0,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,1320,0,?,600,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.2,640,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,20,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,614,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,4880,?,0,?,3 -TN,C,A,0,0,?,S,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,609.9,0,?,0,?,5 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,610,0,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.5,900,0,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,762,N,0,?,3 -ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,609.9,0,?,0,?,3 -ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.501,1275,4880,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1220,762,?,0,?,U -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,759,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,3000,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,200.1,4880,?,0,?,U -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,335,3000,?,0,?,5 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1250,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,612,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,610,4880,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,609,0,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,1200,150,?,0,?,U -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,609.9,0,?,0,?,U -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4170,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,4880,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,20,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1300,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,1320,4170,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,610,4880,?,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.6,609.9,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,519.9,762,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,75,0,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,900,0,?,500,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,Y,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.8,356.1,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1300,4880,?,0,?,2 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.201,190,0,?,0,?,U -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.501,600.1,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,610,762,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.2,609.9,0,?,0,?,5 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.799,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,150,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,640,0,?,0,?,3 -?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,762,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,500,4120,Y,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,0,?,3 -?,C,?,0,45,?,S,?,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,610,4170,?,0,?,2 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1,610,0,?,0,?,3 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,640,0,?,500,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,612,?,0,?,2 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,762,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,600.1,0,?,0,?,5 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,4880,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,610,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1220,612,?,0,?,5 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,N,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,762,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,20,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,1320,0,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1275,762,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,4170,?,0,?,3 -ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,20,0,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,640,0,?,0,?,3 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,600,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.301,610,0,N,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,1,?,0,?,5 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,612,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1250,0,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,610,0,?,0,?,3 -?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,B,?,?,?,?,SHEET,2,300.1,301,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,1.2,599.9,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.8,356.1,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,610,4880,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.4,600,611,?,0,?,U -?,C,R,0,0,?,A,3,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,20,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,762,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,356,762,?,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,610,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609,612,?,0,?,3 -?,C,?,0,0,T,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,?,0,?,3 -?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,300.1,301,?,0,?,2 -?,C,A,0,0,?,S,3,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,1320,0,?,0,?,3 -?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1320,301,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,609.9,0,?,0,?,U -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,519,762,?,0,?,3 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3,65.1,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,4170,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4880,?,0,?,3 -?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,762,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1320,761,?,0,?,2 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,1220,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,762,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,762,N,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.5,1220,4880,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.201,0,0,?,0,?,3 -ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1250,0,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,640,0,?,600,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,5 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,762,?,0,?,3 -TN,C,A,0,0,?,S,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,609.9,0,?,0,?,5 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,20,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,3,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,U -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,761,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,609.9,0,?,0,?,3 -?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.5,28,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4170,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,761,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,150,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,SHEET,3.2,610,762,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,761,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,4,1000,0,?,600,?,U -?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,609.9,762,?,0,?,2 -?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.601,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,762,Y,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,50,0,?,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,1274.9,762,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,150,762,?,0,?,2 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609.9,4880,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,759,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,830,881,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,60,0,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.801,1320,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.599,610,0,?,0,?,2 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.3,1220,4170,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,150,4880,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,1320,0,?,500,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,N,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.299,1050,1220,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,300.1,4880,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,0.6,1220,762,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,761,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,612,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,609.9,762,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,N,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,610,0,?,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,1275,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,1320,611,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,1,?,0,?,2 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.8,255,270,?,0,?,3 -?,C,A,8,0,?,S,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,20,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,300,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,N,0,?,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.9,610,3000,?,0,?,2 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,610,0,?,600,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,900,0,?,600,?,3 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1320,4880,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,4170,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,4880,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,374.9,762,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,609.9,0,?,0,?,5 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,1250,4880,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,N,0,?,3 -?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.799,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,519.9,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,1250,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1320,0,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,1,20,0,?,0,?,U -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,5 -?,C,M,0,0,?,?,?,600,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1320,4880,?,0,?,2 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,760,N,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,640,0,?,600,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1320,0,?,0,?,3 -?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.201,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,4880,Y,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,609.9,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,761,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,2 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,1220,761,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1220,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1525,4170,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,2,3 -?,C,R,6,0,T,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.5,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.3,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,609.9,0,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.3,610,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.801,1320,0,?,600,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,610,762,?,0,?,5 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.451,610,762,?,0,?,3 -?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,610,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,COIL,0.6,609.9,0,?,0,?,5 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,762,?,0,?,2 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,335,612,?,0,?,5 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,761,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,762,Y,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,150,?,0,?,3 -?,C,A,0,0,?,?,?,500,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,1320,0,?,0,?,3 -?,C,A,0,70,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,610,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,2 -?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.799,609,0,?,0,?,3 -ZS,C,R,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,150,762,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1220,762,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.321,1220,0,?,0,?,U -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1274.9,4880,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,Y,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,606.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,762,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,20,0,?,0,?,2 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1,900,0,?,0,?,3 -?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,B,?,?,?,?,SHEET,2,609.9,4880,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,150,612,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,1220,4880,?,0,?,U -?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,762,?,0,?,3 -?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.201,1320,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1525,612,?,0,?,2 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,150,4880,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,335,1,?,0,?,5 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,1300,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,1320,762,Y,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,609,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,1220,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.599,609.9,0,?,0,?,2 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,595,4880,?,0,?,3 -?,C,R,0,0,?,A,3,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1320,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,75,0,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,150,612,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,150,762,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,P,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1220,762,?,0,?,5 -?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,1000,0,?,600,?,3 -?,C,R,0,0,?,A,3,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,1320,0,?,0,?,3 -ZS,C,A,0,70,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,610,0,?,0,?,3 -?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,610,4880,?,0,?,3 -ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,4170,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,609.9,612,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,Y,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,610,4170,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1220,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,4170,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,5 -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.1,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2,1500,4170,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,3,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.5,610,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,4170,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,335,611,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,COIL,0.699,610,0,N,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,374.9,4880,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1320,4880,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,762,N,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,375,612,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,20,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,1320,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.201,609.9,0,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.3,900,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,150,762,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,2 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,250,0,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1300,4880,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.9,966,0,?,0,?,3 -?,C,A,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,1.001,50,0,Y,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1300,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,610,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1500,4170,?,0,?,2 -% -% instances from file: anneal-test.arff -% -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,609.9,0,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,610,762,?,0,?,U -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,610,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,50,0,?,0,?,5 -?,C,?,0,0,?,?,?,500,?,P,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,B,?,?,?,?,SHEET,1.6,300.1,301,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.6,610,4170,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,1250,762,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,610,762,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.8,50,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.8,609.9,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,831.9,881,?,0,?,2 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4170,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,385.1,0,?,0,?,3 -?,C,?,0,50,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.601,1320,0,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.301,1320,762,Y,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,150,3000,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,4880,?,0,?,3 -?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,609.9,0,?,0,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,335,3000,?,0,?,5 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.5,335,3000,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,301,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,60,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,1320,0,?,0,?,3 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,1220,762,?,0,?,5 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.6,1320,0,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,1,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,762,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,4880,?,0,?,3 -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,50,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.301,1220,4170,?,0,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,640,0,?,600,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,375,612,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,1320,0,?,0,?,3 -?,C,S,70,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,2.5,610,762,?,0,?,3 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,610,0,Y,0,?,U -?,C,K,65,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,900,0,?,600,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.2,900,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,1220,4880,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.001,610,0,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.3,610,4880,Y,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,610,762,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,F,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,610,4880,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.999,610,762,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,0,762,?,0,?,3 -?,C,R,0,0,?,?,?,500,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.4,1320,4880,N,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,762,?,0,?,3 -?,C,?,0,0,?,A,2,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,610,762,?,0,?,3 -ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2,1250,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1320,761,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,1320,0,?,0,?,3 -ZS,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,609.9,4170,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.601,609,4880,?,0,?,3 -?,C,M,0,0,?,?,?,600,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.9,1050,1220,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1525,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,609.9,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,COIL,0.7,599.9,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,609.9,0,?,0,?,2 -?,C,M,0,0,?,?,?,350,?,?,G,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,1.2,375,612,?,0,?,3 -?,C,A,8,0,?,S,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,609.9,0,?,0,?,3 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,1300,4880,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.1,610,0,?,0,?,3 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,609.9,762,?,0,?,2 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1320,0,?,0,?,3 -ZS,C,A,0,85,T,?,?,0,?,?,E,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.8,610,4880,?,0,?,U -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.6,520,0,?,0,?,3 -?,C,A,0,80,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1320,4170,Y,0,?,U -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,50,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,3.2,1320,762,?,0,?,3 -ZS,C,A,0,0,?,S,5,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1,609.9,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.699,610,0,?,0,?,3 -?,C,W,0,0,?,?,?,310,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,3 -?,C,?,0,70,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.6,610,0,?,600,?,3 -?,C,K,55,0,?,?,?,0,?,?,?,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.2,640,0,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,1320,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,F,?,?,Y,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1220,762,?,0,?,3 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,4880,?,0,?,2 -?,C,?,0,0,?,S,1,0,?,?,G,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,Y,?,?,?,COIL,0.24,20,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.3,1320,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,375,612,?,0,?,3 -ZS,C,A,0,50,T,?,?,0,?,?,E,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.451,1250,762,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.5,900,0,?,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,G,?,?,Y,?,B,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,1300,4880,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,1320,0,?,0,?,3 -?,C,K,45,0,?,?,?,0,?,?,?,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,3.2,640,0,?,500,?,3 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,B,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,609.9,3000,?,0,?,5 -TN,C,?,0,0,?,A,1,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,SHEET,1.6,609.9,612,?,0,?,5 -?,C,R,0,0,?,S,2,0,?,?,?,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.6,1500,4170,?,0,?,2 -TN,C,A,0,0,?,?,3,0,N,?,?,?,?,?,?,?,?,?,C,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.2,609.9,1,?,0,?,5 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,610,762,?,0,?,2 -?,C,R,0,0,?,S,3,0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.601,830,880,?,0,?,2 -?,C,V,0,0,?,S,2,0,?,?,?,2,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1.599,150,762,?,0,?,2 -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.4,20,0,?,0,?,U -?,C,A,0,85,T,?,?,0,?,?,G,?,?,?,Y,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,4,610,0,?,500,?,U -% -% -% +% JvR: Rest of dataset truncated for space reasons. diff --git a/sklearn/datasets/tests/mock_openml/292/data.arff b/sklearn/datasets/tests/mock_openml/292/data.arff index 16ae263d173d0..b46a511c4d0eb 100644 --- a/sklearn/datasets/tests/mock_openml/292/data.arff +++ b/sklearn/datasets/tests/mock_openml/292/data.arff @@ -112,608 +112,4 @@ {0 -1, 1 -1, 2 -0.8547368, 3 -0.2857143, 5 -0.8461538, 6 -0.25, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.99916} {0 -1, 1 1, 2 -0.2129324, 3 -0.6428571, 5 -0.6923077, 7 -0.9852632, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.45, 14 -1} {0 -1, 1 1, 2 -0.7091729, 3 -0.9285714, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.72, 14 -1} -{0 1, 1 1, 2 -0.2833082, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} -{0 -1, 1 -1, 2 -0.6691729, 3 -0.02392857, 5 0.5384615, 6 0.75, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99998} -{0 1, 1 -1, 3 -0.07142857, 5 -0.6923077, 7 -0.6375439, 8 1, 9 1, 10 -0.7313433, 11 1, 13 -1, 14 -1} -{0 1, 1 1, 2 -0.3858647, 3 -0.625, 5 0.2307692, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.71, 14 -0.99988} -{0 -1, 1 1, 2 -0.7467669, 3 -0.9582143, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 1, 2 -0.5789474, 3 -0.9078571, 5 -0.5384615, 6 0.75, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.86, 14 -1} -{0 -1, 1 1, 2 -0.1278195, 3 -0.7082143, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.892, 14 -0.998} -{0 -1, 1 1, 2 -0.5512782, 3 0.03571429, 5 -0.8461538, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99428} -{0 1, 1 1, 2 -0.3233083, 3 -0.6428571, 5 0.07692308, 7 -0.8245614, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -1, 14 -0.99266} -{0 -1, 1 -1, 2 -0.8670677, 3 -0.2857143, 4 -1, 5 0.5384615, 6 0.75, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.66, 14 -1} -{0 1, 1 1, 2 -0.7744361, 3 -0.8928571, 5 0.2307692, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.85, 14 -0.99984} -{0 -1, 1 -1, 2 -0.2430076, 3 -0.8810714, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9922} -{0 -1, 1 1, 2 -0.4562406, 3 -0.9971429, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.8923308, 3 -0.3214286, 5 -0.2307692, 6 -0.25, 7 -0.877193, 8 -1, 9 1, 10 -0.7014925, 11 1, 13 -1, 14 -0.9998} -{0 1, 1 -1, 2 -0.7993985, 3 -0.9403571, 5 0.5384615, 6 -0.25, 7 -0.8887719, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.2381954, 3 -0.7142857, 5 0.07692308, 6 -0.25, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.52, 14 -1} -{0 1, 1 1, 2 -0.2505264, 3 -0.985, 5 -0.5384615, 6 -0.25, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} -{0 1, 1 1, 2 -0.5813534, 3 -0.01785714, 5 0.2307692, 6 -0.25, 7 -0.5964912, 8 1, 9 -1, 10 -1, 11 1, 13 -0.513, 14 -0.99} -{0 1, 1 1, 2 -0.5789474, 3 -0.9582143, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.9824561, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.74, 14 -0.99} -{0 -1, 1 1, 2 -0.8421053, 3 -1, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.880597, 11 -1, 13 -0.955, 14 -0.99998} -{0 1, 1 -1, 2 -0.6616541, 3 -0.9375, 5 1, 6 0.75, 7 -0.9270175, 8 1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -0.8828} -{0 1, 1 1, 2 -0.5813534, 3 -0.8571429, 5 1, 6 0.75, 7 -0.9298246, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.86, 14 -0.84912} -{0 -1, 1 1, 2 -0.7443609, 3 -0.3571429, 5 -0.2307692, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 1, 1 -1, 2 0.08511284, 3 -0.02964286, 5 -0.5384615, 6 0.75, 7 -0.4035088, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.4412029, 3 -0.8214286, 5 0.07692308, 6 -0.25, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} -{0 -1, 1 1, 2 -0.2631579, 3 -0.2767857, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} -{0 -1, 1 1, 2 0.009924872, 3 -0.5357143, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.99544} -{0 -1, 1 1, 2 -0.5765414, 3 -0.7142857, 4 -1, 5 -0.6923077, 6 0.75, 7 -0.5964912, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.925, 14 -1} -{0 1, 1 -1, 2 -0.3383459, 3 -0.9346429, 5 -0.2307692, 6 -0.25, 7 -0.9473684, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -1, 14 -0.96834} -{0 -1, 1 1, 2 -0.403609, 3 -0.9821429, 5 -0.6923077, 7 -0.7192982, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.58, 14 -1} -{0 1, 1 1, 2 -0.3885714, 3 -0.9942857, 4 -1, 5 -0.07692308, 7 -0.997193, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.72, 14 -0.96} -{0 1, 1 -1, 2 -0.7894737, 3 -0.2617857, 5 0.8461538, 6 0.75, 7 -0.9764912, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.92, 14 -0.999} -{0 1, 1 1, 2 -0.4159399, 3 -0.9285714, 5 1, 6 -0.25, 7 -0.9473684, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.66, 14 -0.91858} -{0 1, 1 1, 2 -0.7293233, 3 -0.2142857, 5 0.5384615, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.9, 14 -0.98382} -{0 1, 1 1, 2 0.05263158, 3 -0.3928571, 5 0.07692308, 6 0.75, 7 -0.122807, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.819, 14 -0.9669} -{0 1, 1 1, 2 -0.1930826, 3 -0.6428571, 5 0.07692308, 6 -0.25, 7 -0.6491228, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -1, 14 -0.9387} -{0 -1, 1 1, 2 -0.7918797, 3 -0.9403571, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.76, 14 -1} -{0 -1, 1 -1, 2 -0.2481203, 3 -0.8928571, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.924, 14 -1} -{0 1, 1 -1, 2 0.303158, 3 0.3928571, 5 0.07692308, 6 -0.25, 7 -0.6140351, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -1, 14 -0.94} -{0 1, 1 -1, 2 -0.4736842, 3 -0.7321429, 5 0.8461538, 6 0.75, 7 -0.9561404, 8 1, 9 1, 10 -0.7313433, 11 1, 13 -0.819, 14 -1} -{0 -1, 1 1, 2 -0.7518797, 3 -0.9435714, 5 0.2307692, 6 -0.25, 7 -0.9796491, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.58, 14 -0.99434} -{0 1, 1 -1, 2 0.3407519, 3 -0.2857143, 5 0.5384615, 6 -0.25, 7 -0.7192982, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -1, 14 -0.96796} -{0 -1, 1 1, 2 -0.5437594, 3 -0.9732143, 5 0.07692308, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.78, 14 -0.9972} -{0 1, 1 -1, 2 -0.03007519, 3 -0.7142857, 5 -0.3846154, 6 -0.5, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -0.9808} -{0 1, 1 1, 2 -0.7819549, 3 -0.7857143, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.9238596, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.84, 14 -0.99998} -{0 1, 1 -1, 2 -0.6691729, 3 -0.1071429, 5 -0.2307692, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.88, 14 -0.98866} -{0 -1, 1 -1, 2 -0.7870677, 3 -0.9642857, 4 -1, 5 0.3846154, 6 -0.75, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -1} -{0 -1, 1 1, 2 -0.6742857, 3 -0.03571429, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.816, 14 -1} -{0 -1, 1 -1, 2 -0.6165414, 3 -0.8064286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.92, 14 -1} -{0 -1, 1 1, 2 -0.1828572, 3 -0.9403571, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.87, 14 -0.99998} -{0 -1, 1 -1, 2 -0.2607518, 3 -0.6846429, 5 0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} -{0 -1, 1 1, 2 -0.8246617, 3 -0.9582143, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9104478, 11 -1, 13 -0.65, 14 -0.98462} -{0 1, 1 1, 2 -0.2330827, 3 -0.3214286, 5 -0.07692308, 6 -0.25, 7 -0.5438596, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -0.76, 14 -0.90786} -{0 1, 1 1, 2 -0.6390977, 3 -0.9642857, 5 0.07692308, 6 -0.25, 7 -0.8975439, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.688, 14 -1} -{0 1, 1 -1, 2 -0.02766911, 3 -0.7857143, 5 0.07692308, 6 -0.25, 7 -0.8333333, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.604, 14 -0.91682} -{0 -1, 1 1, 2 -0.8219549, 3 -0.2857143, 4 -1, 5 -0.5384615, 6 0.75, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 1, 13 -0.86, 14 -1} -{0 -1, 1 -1, 2 -0.7443609, 3 -0.9107143, 4 -1, 5 -1, 6 -1, 7 -0.7719298, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -1} -{0 -1, 1 1, 2 -0.847218, 3 -0.7471429, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -0.99998} -{0 1, 1 1, 2 0.5136843, 3 0.4285714, 5 1, 6 0.75, 7 0.2280702, 8 1, 9 1, 10 -0.7313433, 11 1, 13 -1, 14 -0.98} -{0 -1, 1 -1, 2 -0.9172932, 3 -0.9107143, 5 0.5384615, 6 -0.25, 7 -0.9824561, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.892, 14 -0.99804} -{0 1, 1 -1, 2 0.6517293, 3 0.07142857, 5 0.3846154, 6 1, 7 -1, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -1, 14 -0.93248} -{0 1, 1 1, 2 0.8947368, 3 0.5921429, 5 0.3846154, 6 1, 7 -0.1052632, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -1, 14 -0.99782} -{0 -1, 1 -1, 2 -0.9347368, 3 -0.7946429, 5 0.5384615, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} -{0 -1, 1 1, 2 -0.366015, 3 -0.7142857, 5 -0.8461538, 7 -0.122807, 8 1, 9 -1, 10 -1, 11 1, 13 -0.816, 14 -1} -{0 1, 1 -1, 2 0.01263152, 3 -0.4285714, 5 0.3846154, 7 -0.5438596, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.625, 14 0.022} -{0 1, 1 1, 2 -0.7166917, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} -{0 -1, 1 1, 2 -0.05503765, 3 -0.8928571, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 1, 13 -0.86, 14 -1} -{0 -1, 1 1, 2 -0.9572932, 3 -0.5, 5 0.3846154, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.4, 14 -1} -{0 -1, 1 1, 2 -0.847218, 3 -0.9703571, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.8, 14 -0.99998} -{0 1, 1 1, 2 0.1654135, 3 -0.5357143, 5 -0.5384615, 6 -0.25, 7 -0.5585965, 8 1, 9 1, 10 -0.5522388, 11 -1, 13 -1, 14 -0.77596} -{0 1, 1 1, 2 -0.8369925, 3 -1, 4 -1, 5 -0.07692308, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.5, 14 -0.99998} -{0 1, 1 1, 2 -0.8721805, 3 -0.9882143, 5 0.5384615, 6 0.5, 7 -0.9852632, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.9992} -{0 -1, 1 1, 2 -0.2857143, 3 -0.9403571, 5 0.3846154, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.9999} -{0 1, 1 1, 2 -0.7317293, 3 -0.8867857, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.7835088, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.92, 14 -1} -{0 -1, 1 1, 2 0.02496247, 3 -0.7025, 5 1, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.48, 14 -1} -{0 -1, 1 1, 2 -0.3885714, 3 -0.8214286, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.54, 14 -0.99968} -{0 -1, 1 -1, 2 -0.4186466, 3 -0.8839286, 5 -0.8461538, 6 -0.25, 7 -0.9621053, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 1, 1 1, 2 -0.1178947, 3 -0.9732143, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9736842, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.7, 14 -0.99676} -{0 1, 1 1, 2 -0.3759398, 3 -0.7114286, 4 -1, 5 -0.6923077, 7 -0.4035088, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.805, 14 -1} -{0 -1, 1 1, 2 -0.1278195, 3 -0.7857143, 5 -0.6923077, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.996} -{0 -1, 1 1, 2 -0.8646617, 3 -0.9882143, 5 -0.8461538, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.72, 14 -1} -{0 -1, 1 1, 2 -0.7193985, 3 -0.8214286, 5 -1, 6 -1, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.91584} -{0 1, 1 -1, 2 -0.7368421, 3 -0.3957143, 4 -1, 5 1, 6 -0.25, 7 -0.8273684, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.836, 14 -1} -{0 -1, 1 1, 2 -0.8745865, 3 -0.9853571, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.985} -{0 -1, 1 1, 2 -0.8595489, 3 -0.2560714, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.9925} -{0 -1, 1 -1, 2 -0.5813534, 3 -0.8928571, 5 -0.07692308, 6 -0.25, 7 -0.8596491, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.632, 14 -1} -{0 1, 1 -1, 2 -0.8445113, 3 -0.3392857, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 1, 9 1, 10 -0.880597, 11 1, 13 -0.92, 14 -0.99} -{0 -1, 1 1, 2 -0.7317293, 3 -0.9464286, 5 -0.6923077, 6 -0.25, 7 -0.8887719, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.6, 14 -0.99982} -{0 -1, 1 1, 2 0.4661654, 3 -0.08928571, 4 -1, 5 0.07692308, 6 0.75, 7 -0.6491228, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.888, 14 -1} -{0 1, 1 -1, 2 -0.7067669, 3 -0.3571429, 5 0.5384615, 6 -0.25, 7 -0.4035088, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.88, 14 -1} -{0 -1, 1 1, 2 -0.3533835, 3 -0.7739286, 5 1, 6 0.75, 7 -0.7368421, 8 1, 9 -1, 10 -1, 11 1, 13 -0.32, 14 -1} -{0 -1, 1 -1, 2 0.2956392, 3 -0.6964286, 4 -1, 5 -1, 6 -1, 7 -0.6491228, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.99992} -{0 -1, 1 -1, 2 0.190376, 3 -0.9882143, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.938, 14 -0.99946} -{0 1, 1 1, 2 -0.1753384, 3 -0.7114286, 5 0.8461538, 6 0.75, 7 -0.5087719, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -0.68, 14 -1} -{0 1, 1 1, 2 -0.1452632, 3 -0.64, 5 0.5384615, 6 0.75, 7 -0.1052632, 8 1, 9 -1, 10 -1, 11 1, 13 -0.908, 14 -1} -{0 -1, 1 1, 2 -0.1753384, 3 -0.9107143, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9961} -{0 -1, 1 -1, 2 -0.3984962, 3 -0.9464286, 5 -0.5384615, 7 -0.9298246, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.788, 14 -1} -{0 1, 1 1, 2 -0.6415038, 3 -0.1071429, 5 0.8461538, 6 -0.25, 7 -0.9150877, 8 1, 9 1, 10 1, 11 1, 13 -0.86, 14 -0.99484} -{0 1, 1 1, 2 -0.6818045, 3 -0.5267857, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.6140351, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.9, 14 -1} -{0 1, 1 1, 2 -0.7118797, 3 -0.1696429, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -0.994} -{0 -1, 1 1, 2 -0.4911278, 3 -0.8214286, 5 0.8461538, 6 0.75, 7 -0.8421053, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.66, 14 -1} -{0 -1, 1 1, 2 -0.2956392, 3 -0.7142857, 5 0.07692308, 7 -0.6491228, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.72, 14 -1} -{0 -1, 1 1, 2 -0.6240602, 3 -0.89, 5 0.2307692, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 -1, 2 -0.518797, 3 -0.9525, 5 0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.7, 14 -1} -{0 -1, 1 -1, 2 -0.7218045, 3 -0.8689286, 5 -0.3846154, 6 -0.5, 7 -1, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.8, 14 -0.99894} -{0 -1, 1 1, 2 -0.8947368, 3 -0.7857143, 5 -0.5384615, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -0.9992} -{0 1, 1 1, 2 -0.5338346, 3 0.05642857, 5 -0.2307692, 6 -0.25, 7 -0.6463158, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.832, 14 -1} -{0 -1, 1 -1, 2 -0.553985, 3 -0.7471429, 5 -0.6923077, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 1, 13 -0.829, 14 -1} -{0 -1, 1 1, 2 -0.3735338, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} -{0 -1, 1 1, 2 -0.7091729, 3 -0.9582143, 5 0.07692308, 6 0.75, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} -{0 1, 1 1, 2 -0.6616541, 3 -0.1964286, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.4925373, 11 -1, 13 -0.8, 14 -0.97584} -{0 1, 1 -1, 2 -0.8496241, 3 -0.4642857, 5 0.5384615, 6 -0.25, 7 -0.8098246, 8 1, 9 1, 10 -0.8507463, 11 -1, 13 -0.816, 14 -0.46548} -{0 -1, 1 1, 2 -0.8998496, 3 -0.9821429, 5 0.5384615, 6 -0.25, 7 -0.9764912, 8 -1, 9 1, 10 -0.880597, 11 -1, 13 -0.84, 14 -0.99984} -{0 -1, 1 -1, 2 -0.9299248, 3 -0.9760714, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.84, 14 -0.99748} -{0 -1, 1 1, 2 -0.4234587, 3 -0.8214286, 5 -0.2307692, 6 -0.25, 7 -0.877193, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.28, 14 -1} -{0 1, 1 -1, 2 -0.8021053, 3 -0.2857143, 5 0.07692308, 6 0.75, 7 -0.9298246, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.95, 14 -0.9707} -{0 -1, 1 -1, 2 -0.7593985, 3 -0.875, 4 -1, 5 -0.3846154, 6 -0.5, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} -{0 1, 1 1, 2 -0.4159399, 3 -0.9257143, 5 0.6923077, 6 0.75, 7 -0.5438596, 8 1, 9 -1, 10 -1, 11 1, 13 -0.836, 14 -0.3743} -{0 -1, 1 -1, 2 -0.6517293, 3 -0.8510714, 5 0.07692308, 6 0.75, 7 -0.8070175, 8 1, 9 -1, 10 -1, 11 1, 13 -0.64, 14 -0.99998} -{0 1, 1 -1, 2 -0.6691729, 3 -0.7857143, 5 0.5384615, 6 0.75, 7 -0.8712281, 8 1, 9 1, 10 -0.4328358, 11 -1, 13 -1, 14 -0.99} -{0 1, 1 1, 2 -0.4863158, 3 -1, 5 0.2307692, 6 -0.25, 7 -0.9122807, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.798, 14 -1} -{0 -1, 1 1, 2 -0.7894737, 3 -0.6367857, 4 -1, 5 -0.3846154, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -0.99632} -{0 -1, 1 -1, 2 -0.2006014, 3 -0.4196429, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9884211, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.816, 14 -0.99964} -{0 -1, 1 1, 2 -0.5287218, 3 -0.9107143, 5 0.07692308, 6 0.75, 7 -0.9824561, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.6, 14 -0.99784} -{0 -1, 1 1, 2 -0.1828572, 3 -0.9642857, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.87, 14 -1} -{0 1, 1 -1, 2 -0.5263158, 3 -0.9671429, 5 -0.5384615, 6 -0.25, 7 -0.9621053, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.62, 14 -0.99} -{0 1, 1 1, 2 0.2231578, 3 -0.9642857, 4 -1, 5 -0.5384615, 6 0.75, 7 -0.7221053, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -0.99372} -{0 -1, 1 1, 2 -0.3909774, 3 -0.6071429, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.94, 14 -1} -{0 -1, 1 1, 2 -0.6616541, 3 -0.1428571, 5 -0.5384615, 6 -0.25, 7 -0.8421053, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.88, 14 -0.9999} -{0 -1, 1 -1, 2 -0.6141353, 3 -0.8185714, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -0.9988} -{0 1, 1 -1, 2 -0.4186466, 3 -0.6696429, 5 0.5384615, 6 0.75, 7 -0.8859649, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.4009023, 3 -0.8453571, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.88, 14 -1} -{0 -1, 1 1, 2 -0.3257143, 3 -0.6071429, 5 -0.6923077, 7 -0.6491228, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.79, 14 -0.98626} -{0 -1, 1 1, 2 -0.8270677, 3 -0.9792857, 5 -0.5384615, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99272} -{0 1, 1 1, 2 -0.6866165, 3 -0.9375, 5 0.5384615, 6 -0.25, 7 -0.6754386, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.48, 14 -0.96} -{0 1, 1 -1, 2 -0.4962406, 3 -0.5357143, 5 0.07692308, 7 -0.7192982, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -1, 14 -0.9387} -{0 -1, 1 1, 2 -0.8120301, 3 -0.5, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 1, 1 1, 2 -0.6517293, 3 -0.9585714, 5 0.07692308, 6 -0.25, 7 -0.9796491, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.904, 14 -0.89752} -{0 -1, 1 1, 2 -0.5239098, 3 -0.6607143, 5 -0.07692308, 6 -0.25, 7 -0.8596491, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.54, 14 -0.99864} -{0 -1, 1 1, 2 -0.115188, 3 -0.8392857, 5 -0.6923077, 7 -0.9473684, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.44, 14 -1} -{0 -1, 1 1, 2 -0.5488722, 3 -0.9167857, 5 -0.5384615, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.72, 14 -1} -{0 -1, 1 1, 2 -0.4640602, 3 -0.7857143, 4 -1, 5 -0.6923077, 7 -0.5087719, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99998} -{0 1, 1 1, 2 -0.8045113, 3 -0.2885714, 5 0.3846154, 6 -0.75, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 1, 1 1, 2 -0.06015038, 3 -0.3928571, 5 0.8461538, 6 0.75, 7 -0.01754386, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.912, 14 -0.96} -{0 1, 1 -1, 2 -0.7269173, 3 -0.8364286, 5 0.5384615, 6 0.75, 7 -0.8392982, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.86, 14 -0.95232} -{0 1, 1 -1, 2 -0.7918797, 3 -0.7857143, 5 0.5384615, 6 -0.25, 7 -0.9884211, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.9, 14 -0.99988} -{0 -1, 1 1, 2 -0.5765414, 3 -0.8928571, 5 0.2307692, 6 -0.25, 7 -0.8421053, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.9, 14 -0.99994} -{0 -1, 1 1, 2 -0.1828572, 3 -0.8392857, 4 -1, 5 1, 6 0.75, 7 -0.2982456, 8 1, 9 -1, 10 -1, 11 1, 13 -0.824, 14 -1} -{0 1, 1 1, 2 0.2833082, 3 1, 4 -1, 5 0.07692308, 6 -0.25, 7 1, 8 1, 9 1, 10 0.1940299, 11 -1, 13 -1, 14 -0.9997} -{0 1, 1 -1, 2 0.5136843, 3 -0.9882143, 5 -1, 6 -1, 7 -1, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.768, 14 -0.998} -{0 1, 1 -1, 2 -0.7392481, 3 -0.1964286, 4 -1, 5 1, 6 0.75, 7 -0.9473684, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -1, 14 -0.99358} -{0 -1, 1 -1, 2 -0.6818045, 3 -0.8214286, 4 -1, 5 -0.6923077, 7 -0.6842105, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.99088} -{0 -1, 1 -1, 2 0.6766917, 3 -0.5714286, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.3434586, 3 -0.9464286, 5 -0.5384615, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.769, 14 -1} -{0 1, 1 1, 2 0.04000006, 3 -0.1428571, 5 -0.07692308, 6 -0.25, 7 0.122807, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.89, 14 -1} -{0 1, 1 -1, 2 -0.5690226, 3 0.07142857, 4 -1, 5 0.3846154, 6 1, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.73576} -{0 1, 1 1, 2 -0.3557895, 3 -0.8214286, 5 -0.5384615, 6 -0.25, 7 -0.6842105, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -0.85, 14 -0.9746} -{0 1, 1 1, 2 0.07518797, 3 -0.4582143, 5 -0.6923077, 7 -0.4677193, 8 1, 9 1, 10 -0.5522388, 11 1, 13 -1, 14 -0.9} -{0 -1, 1 1, 2 1, 3 -0.6071429, 5 0.07692308, 6 -0.25, 7 -0.9621053, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9932} -{0 -1, 1 1, 2 -0.5338346, 3 -0.07142857, 5 -0.8461538, 6 0.75, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.772, 14 -1} -{0 -1, 1 -1, 2 -0.9046617, 3 -0.9642857, 5 -0.6923077, 6 -0.25, 7 -0.9884211, 8 -1, 9 1, 10 -0.8208955, 11 1, 13 -0.76, 14 -0.9993} -{0 -1, 1 -1, 2 -0.9323308, 3 -0.9882143, 5 -0.2307692, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.68, 14 -0.99998} -{0 1, 1 1, 2 0.3933835, 3 0.03571429, 5 -1, 6 -1, 7 0.2631579, 8 1, 9 1, 10 -0.5522388, 11 1, 13 -1, 14 -0.98} -{0 1, 1 1, 2 -0.5714286, 3 -0.8571429, 5 -0.5384615, 6 0.75, 7 -0.7077193, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.819, 14 -1} -{0 1, 1 1, 2 -0.1654135, 3 -0.89, 5 -0.6923077, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.784, 14 -1} -{0 -1, 1 1, 2 -0.6893233, 3 -0.3571429, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.6766917, 3 -0.0475, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -0.9905} -{0 1, 1 1, 2 -0.3684211, 3 0.07142857, 5 0.6923077, 6 0.5, 7 -0.622807, 8 1, 9 1, 10 -0.7313433, 11 1, 13 -1, 14 -0.99732} -{0 -1, 1 1, 2 -0.4009023, 3 -0.9107143, 5 0.2307692, 6 -0.25, 7 -0.9182456, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} -{0 1, 1 -1, 2 -0.1855638, 3 -0.2857143, 5 0.5384615, 6 0.75, 7 -0.877193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.971, 14 -0.98326} -{0 1, 1 1, 2 -0.7993985, 3 -0.8689286, 5 0.07692308, 6 -0.25, 7 -0.8421053, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.9, 14 -0.997} -{0 1, 1 1, 2 -0.2857143, 3 -0.9196429, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.569, 14 -1} -{0 1, 1 1, 2 0.04511278, 3 -0.6964286, 5 -0.07692308, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 1, 13 -0.775, 14 -1} -{0 -1, 1 1, 2 -0.7218045, 3 -0.9464286, 5 -0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.68, 14 -1} -{0 -1, 1 1, 2 -0.3609023, 3 -0.7589286, 5 0.07692308, 6 0.75, 7 -0.4182456, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.922406, 3 -0.8035714, 5 -0.2307692, 6 -0.25, 7 -0.9533333, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.92, 14 -0.99958} -{0 1, 1 1, 2 -0.7317293, 3 -0.25, 5 0.5384615, 6 0.75, 7 -0.9063158, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 -1, 2 -0.7593985, 3 -0.1607143, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -1} -{0 1, 1 -1, 2 -0.6592481, 3 -0.8185714, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 1, 13 -0.63, 14 -1} -{0 1, 1 1, 2 -0.3209022, 3 -0.8482143, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9940351, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.95, 14 -0.97626} -{0 -1, 1 -1, 2 -0.553985, 3 -0.7321429, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.96, 14 -0.99692} -{0 -1, 1 1, 2 -0.7467669, 3 -0.1339286, 5 0.07692308, 6 -0.25, 7 -0.7659649, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.82, 14 -0.99654} -{0 1, 1 1, 2 -0.3858647, 3 -0.89, 5 0.8461538, 6 -0.25, 7 -0.8919298, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.48} -{0 -1, 1 1, 2 -0.3609023, 3 -0.8214286, 5 -0.6923077, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.79, 14 -1} -{0 -1, 1 1, 2 -0.553985, 3 -0.7410714, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -1} -{0 -1, 1 -1, 2 -0.8369925, 3 -0.6132143, 5 -0.6923077, 6 0.75, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.99032} -{0 1, 1 1, 2 -0.7142857, 3 -0.9285714, 5 0.07692308, 6 -0.25, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.7, 14 -1} -{0 -1, 1 1, 2 -0.9172932, 3 -0.9910714, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.868, 14 -1} -{0 1, 1 -1, 2 -0.8096241, 3 -0.9910714, 5 0.5384615, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.76, 14 -0.98464} -{0 1, 1 1, 2 -0.7419549, 3 -0.2142857, 5 0.2307692, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.92, 14 -0.99444} -{0 -1, 1 1, 2 -0.3909774, 3 -0.6367857, 4 -1, 5 -0.6923077, 7 -0.9238596, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.52, 14 -1} -{0 -1, 1 -1, 2 0.303158, 3 -0.9760714, 5 -0.6923077, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 1, 13 -0.748, 14 -0.95606} -{0 -1, 1 1, 2 -0.924812, 3 -0.9403571, 5 -0.07692308, 6 -0.25, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.8, 14 -1} -{0 1, 1 1, 2 -0.4261654, 3 -0.8214286, 5 0.8461538, 6 0.75, 7 -0.8070175, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.84, 14 -0.95856} -{0 1, 1 1, 2 0.03759398, 3 0.7917856, 5 0.2307692, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.88, 14 -0.99972} -{0 -1, 1 1, 2 -0.3858647, 3 -0.8035714, 5 -0.6923077, 7 -0.8245614, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.768, 14 -0.996} -{0 -1, 1 1, 2 -0.8622556, 3 -0.9135714, 4 -1, 5 0.3846154, 6 -0.75, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 1, 2 -0.08270677, 3 -0.9642857, 5 -0.07692308, 6 -0.25, 7 -0.245614, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.6, 14 -1} -{0 -1, 1 1, 2 -0.2430076, 3 -0.875, 5 -0.5384615, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.7, 14 -0.99996} -{0 -1, 1 1, 2 -0.4637594, 3 -0.9464286, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.68, 14 -1} -{0 1, 1 1, 2 -0.6592481, 3 -0.8778571, 5 1, 6 -0.25, 7 -0.8831579, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.605, 14 -0.9996} -{0 1, 1 1, 2 0.5539849, 3 -0.2142857, 5 0.3846154, 6 1, 7 0.4035088, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.978, 14 -1} -{0 1, 1 1, 2 -0.1705263, 3 -1, 5 0.07692308, 7 0.05263158, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.4736842, 3 -0.9196429, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.904, 14 -0.99962} -{0 -1, 1 -1, 2 -0.3082707, 3 -0.6635714, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} -{0 -1, 1 1, 2 -0.4412029, 3 -0.4642857, 5 0.3846154, 7 -0.8887719, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.58, 14 -1} -{0 -1, 1 -1, 2 -0.4535338, 3 -0.7767857, 5 -1, 6 -1, 7 -0.7866667, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.8, 14 -0.99992} -{0 1, 1 1, 2 -0.6667669, 3 -0.8035714, 5 0.07692308, 6 -0.25, 7 -0.8421053, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.816, 14 -0.988} -{0 1, 1 1, 2 -0.7542857, 3 -0.9614286, 4 -1, 5 1, 6 -0.25, 7 -0.997193, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.16, 14 -0.99882} -{0 1, 1 1, 2 -0.3834586, 3 -0.7857143, 5 0.8461538, 6 0.75, 7 -0.4796491, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 0.1452632, 3 -0.7857143, 4 -1, 5 -1, 6 -1, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -0.99992} -{0 -1, 1 -1, 2 -0.4640602, 3 -0.8928571, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.8, 14 -0.9979} -{0 -1, 1 1, 2 -0.2580452, 3 -0.9496429, 5 0.07692308, 6 -0.25, 7 -0.9736842, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.775, 14 -0.99} -{0 1, 1 1, 2 -0.2354888, 3 -0.8778571, 5 1, 6 -0.25, 7 -0.9912281, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.52, 14 -1} -{0 -1, 1 1, 2 -0.8670677, 3 -0.8242857, 5 0.07692308, 6 0.5, 7 -0.9326316, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.84, 14 -0.98826} -{0 1, 1 1, 2 -0.2406015, 3 -0.6428571, 5 0.8461538, 6 -0.25, 7 -0.754386, 8 1, 9 1, 10 -0.7014925, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.8120301, 3 -0.2110714, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.864, 14 -1} -{0 -1, 1 1, 2 -0.4285714, 3 -0.8332143, 5 -0.8461538, 6 0.75, 7 -0.5964912, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.708, 14 -1} -{0 -1, 1 1, 2 -0.8547368, 3 -0.5921429, 5 -0.8461538, 6 -0.25, 7 -0.9621053, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} -{0 -1, 1 -1, 2 -0.9374436, 3 -0.4553571, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -1, 14 -0.9968} -{0 1, 1 1, 2 -0.2306766, 3 -0.5803571, 5 0.8461538, 6 0.75, 7 -0.2982456, 8 1, 9 1, 10 -0.5820896, 11 1, 13 -0.601, 14 -1} -{0 -1, 1 -1, 2 -0.8246617, 3 -0.9525, 5 0.2307692, 6 -0.25, 7 -0.8831579, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.78, 14 -0.9999} -{0 1, 1 1, 2 -0.7720301, 3 -0.25, 5 0.07692308, 6 -0.25, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.7317293, 3 -0.9464286, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.8, 14 -0.99212} -{0 -1, 1 1, 2 -0.6415038, 3 -0.7678571, 5 0.07692308, 6 0.75, 7 -0.8392982, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.584, 14 -0.99958} -{0 -1, 1 1, 2 -0.7795489, 3 -0.2796429, 4 -1, 5 0.3846154, 6 0.75, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -1} -{0 -1, 1 -1, 2 0.06015038, 3 -0.8928571, 5 -0.3846154, 6 -0.5, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.99946} -{0 -1, 1 1, 2 -0.7918797, 3 -0.6221429, 5 0.5384615, 6 -0.25, 7 -0.9736842, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.84, 14 -1} -{0 1, 1 -1, 2 -0.8219549, 3 -0.985, 5 0.5384615, 6 0.75, 7 -0.9796491, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -0.92, 14 -0.99802} -{0 1, 1 1, 2 -0.7569925, 3 -0.9821429, 5 -0.8461538, 6 0.75, 7 -0.9533333, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.6066165, 3 -0.9614286, 5 -0.5384615, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 -1, 2 -0.253233, 3 -0.6428571, 5 0.8461538, 6 -0.25, 7 -0.05263158, 8 1, 9 -1, 10 -1, 11 1, 13 -0.02, 14 -1} -{0 1, 1 -1, 2 0.09263164, 3 -0.1042857, 5 -0.2307692, 6 -0.25, 7 -0.8392982, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.844, 14 -1} -{0 -1, 1 -1, 2 -0.9398496, 3 -0.9732143, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.99964} -{0 1, 1 -1, 2 -0.6766917, 3 -0.08928571, 5 0.07692308, 7 -0.6666667, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.927, 14 -0.99112} -{0 1, 1 1, 2 -0.7819549, 3 -0.6578571, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.8421053, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.92, 14 -0.994} -{0 1, 1 1, 2 -0.7494737, 3 -0.2142857, 5 0.8461538, 6 -0.25, 7 -0.9533333, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 1, 1 1, 2 0.22797, 3 -0.3275, 5 -1, 6 -1, 7 0.01157895, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.97, 14 -0.994} -{0 1, 1 1, 2 -0.8697744, 3 -0.6071429, 5 -0.5384615, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -1} -{0 1, 1 1, 2 -0.3106768, 3 -0.6846429, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9824561, 8 1, 9 1, 10 -0.7014925, 11 1, 13 -0.68, 14 -1} -{0 1, 1 1, 2 -0.265564, 3 -0.2767857, 5 1, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.48, 14 -0.99608} -{0 -1, 1 1, 2 -0.7569925, 3 -0.89, 5 -0.5384615, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.644, 14 -1} -{0 -1, 1 -1, 2 0.1479699, 3 -0.5357143, 5 -0.6923077, 7 -0.7835088, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.927, 14 -1} -{0 -1, 1 1, 2 -0.7467669, 3 -0.8392857, 5 -0.6923077, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.9998} -{0 -1, 1 1, 2 0.1630075, 3 -0.8928571, 5 -0.8461538, 6 -0.25, 7 -0.7368421, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.993} -{0 1, 1 -1, 2 0.4186466, 3 -0.6428571, 5 -0.2307692, 6 -0.25, 7 -0.7192982, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -1, 14 -0.99802} -{0 1, 1 1, 2 -0.8069173, 3 -0.5982143, 5 0.2307692, 6 -0.25, 7 -0.88, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.88, 14 -1} -{0 1, 1 1, 2 -0.7142857, 3 -0.7142857, 5 0.07692308, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} -{0 -1, 1 1, 2 -0.3257143, 3 -0.97, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.691, 14 -0.99996} -{0 -1, 1 -1, 2 -0.1428571, 3 -0.875, 4 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.85, 14 -0.99998} -{0 -1, 1 1, 2 -0.7043609, 3 -0.9403571, 5 -0.6923077, 6 0.75, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.78, 14 -0.9999} -{0 1, 1 -1, 2 -0.3308271, 3 -0.9285714, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.99088} -{0 -1, 1 1, 2 -0.2231578, 3 -0.6428571, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.983, 14 -0.99998} -{0 1, 1 -1, 2 -0.847218, 3 -0.6846429, 4 -1, 5 0.07692308, 6 0.75, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -1} -{0 -1, 1 1, 2 -0.593985, 3 -0.9553571, 5 -0.2307692, 6 -0.25, 7 -0.9680702, 8 1, 9 -1, 10 -1, 11 1, 13 -0.8, 14 -1} -{0 -1, 1 1, 2 -0.4384963, 3 -0.7857143, 5 -0.8461538, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -1} -{0 -1, 1 1, 2 -0.8294737, 3 -0.8928571, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.8596491, 8 1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.9996} -{0 1, 1 -1, 2 -0.7344361, 3 -0.2321429, 5 0.5384615, 6 -0.25, 7 -0.9708772, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -1, 14 -0.9888} -{0 1, 1 1, 2 -0.2129324, 3 -0.5564286, 5 0.5384615, 6 -0.25, 7 -0.997193, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.8, 14 -0.994} -{0 1, 1 1, 2 -0.7317293, 3 -0.9882143, 5 0.07692308, 6 -0.5, 7 -0.8421053, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -1, 14 -1} -{0 1, 1 -1, 2 -0.7091729, 3 -0.9435714, 4 -1, 5 0.5384615, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.92, 14 -0.992} -{0 1, 1 -1, 2 -0.5112782, 3 -0.6221429, 5 0.3846154, 6 -0.75, 7 -0.8421053, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.901, 14 -0.99} -{0 1, 1 -1, 2 -0.2006014, 3 -0.4614286, 4 -1, 5 0.5384615, 6 0.75, 7 -0.4385965, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -1, 14 -0.954} -{0 1, 1 -1, 2 -0.3082707, 3 -0.6339286, 5 0.3846154, 6 -0.25, 7 -0.6491228, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.92} -{0 -1, 1 1, 2 -0.481203, 3 -0.8510714, 5 0.07692308, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.7, 14 -1} -{0 1, 1 -1, 2 -0.6565414, 3 -0.7946429, 5 1, 6 0.75, 7 -0.9385965, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.64, 14 -1} -{0 -1, 1 1, 2 -0.5888722, 3 -0.1071429, 5 -0.2307692, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.28, 14 -1} -{0 1, 1 1, 2 -0.4640602, 3 -0.7142857, 5 1, 6 -0.25, 7 -0.6491228, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.71, 14 -0.95442} -{0 -1, 1 1, 2 -0.3885714, 3 -0.5357143, 5 -0.2307692, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 1, 13 -0.557, 14 -1} -{0 -1, 1 1, 2 -0.7494737, 3 -0.8332143, 5 -0.5384615, 6 -0.25, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} -{0 -1, 1 1, 2 -0.478797, 3 -0.7796429, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.84, 14 -0.99918} -{0 -1, 1 1, 2 -0.4640602, 3 -0.9642857, 5 0.07692308, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.68, 14 -1} -{0 -1, 1 1, 2 -0.9323308, 3 -0.7767857, 5 0.2307692, 6 -0.25, 7 -0.9940351, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.99988} -{0 1, 1 1, 2 -0.593985, 3 -0.8810714, 5 0.8461538, 6 0.75, 7 -0.6431579, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.601, 14 -0.98346} -{0 -1, 1 1, 2 -0.6565414, 3 -0.7857143, 5 0.07692308, 6 -0.25, 7 -0.9122807, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.99956} -{0 1, 1 1, 2 0.6240602, 3 -0.6071429, 5 0.3846154, 6 1, 7 -0.0877193, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -1, 14 -1} -{0 1, 1 -1, 2 -0.847218, 3 -0.3214286, 5 0.2307692, 6 -0.25, 7 -0.8859649, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.96, 14 -0.988} -{0 -1, 1 -1, 2 -0.593985, 3 -0.9792857, 5 -0.07692308, 6 0.75, 7 -0.9912281, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.728, 14 -0.99784} -{0 -1, 1 -1, 2 -0.8246617, 3 -0.9525, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 1, 14 -0.99996} -{0 -1, 1 1, 2 -0.4887218, 3 -0.8867857, 5 -0.8461538, 6 -0.25, 7 -0.9589474, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 0.09774436, 3 -0.9403571, 5 -0.2307692, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.76, 14 -0.99766} -{0 -1, 1 1, 2 -0.478797, 3 -0.8928571, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.84, 14 -1} -{0 1, 1 1, 2 0.1377444, 3 0.07142857, 5 0.07692308, 6 -0.25, 7 -0.4035088, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.3133834, 3 -0.9792857, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.7014925, 11 -1, 13 -0.8, 14 -0.99964} -{0 1, 1 1, 2 -0.403609, 3 -0.8035714, 5 -0.07692308, 6 -0.25, 7 -0.7017544, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.796, 14 -1} -{0 1, 1 -1, 2 -0.7870677, 3 -0.7857143, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 1, 2 -0.3257143, 3 0.2946429, 5 0.2307692, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.68, 14 -0.92896} -{0 -1, 1 1, 2 0.112782, 3 -0.9582143, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.855, 14 -1} -{0 -1, 1 -1, 2 -0.7043609, 3 -0.9407143, 5 0.5384615, 6 -0.25, 7 -0.9708772, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.8, 14 -0.99978} -{0 1, 1 1, 2 -0.3557895, 3 -0.6785714, 5 1, 6 0.75, 7 -0.5964912, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.289, 14 -1} -{0 1, 1 -1, 2 0.3434586, 3 0.5, 5 -0.6923077, 7 -0.2982456, 8 1, 9 1, 10 -0.6119403, 11 -1, 13 -1, 14 -0.866} -{0 1, 1 1, 2 -0.5639098, 3 -0.9375, 5 -0.07692308, 6 -0.25, 7 -0.9326316, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.604, 14 -1} -{0 -1, 1 1, 2 -0.4640602, 3 -0.9553571, 5 -0.5384615, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.62, 14 -0.9598} -{0 -1, 1 -1, 2 -0.4586466, 3 -0.7857143, 4 -1, 5 -0.3846154, 6 -0.5, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.9996} -{0 1, 1 1, 2 -0.8294737, 3 -0.5357143, 5 0.2307692, 6 0.75, 7 -0.8975439, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -0.92, 14 -0.94092} -{0 1, 1 1, 2 -0.2381954, 3 -0.5714286, 5 -0.07692308, 6 -0.25, 7 -0.9094737, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.892, 14 -0.97806} -{0 -1, 1 1, 2 -0.8998496, 3 -0.765, 5 -0.6923077, 6 -0.25, 7 -0.9764912, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.86, 14 -0.99996} -{0 -1, 1 1, 2 -0.0652631, 3 -0.5, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8859649, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.99996} -{0 -1, 1 1, 2 -0.924812, 3 -1, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.94, 14 -1} -{0 1, 1 -1, 2 -0.1753384, 3 -0.5357143, 5 0.5384615, 6 -0.25, 7 -0.9649123, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.855, 14 -1} -{0 1, 1 1, 2 -0.5437594, 3 0.07142857, 5 0.07692308, 6 0.75, 7 -0.625614, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.95434} -{0 -1, 1 -1, 2 -0.6264662, 3 -0.8571429, 5 -0.3846154, 6 -0.5, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.724, 14 -0.99998} -{0 1, 1 1, 2 -0.253233, 3 -0.7617857, 5 0.2307692, 6 -0.25, 7 -0.7192982, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -0.617, 14 -0.97312} -{0 1, 1 1, 2 -0.6565414, 3 -0.5714286, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -1, 14 -1} -{0 1, 1 -1, 2 -0.5663158, 3 -0.9732143, 5 0.5384615, 6 -0.25, 7 -0.9589474, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.92, 14 -1} -{0 1, 1 1, 2 0.7945864, 3 0.2678571, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.7368421, 3 -0.1785714, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.92} -{0 -1, 1 -1, 2 -0.596391, 3 -0.9107143, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.908, 14 -0.994} -{0 1, 1 -1, 2 -0.8369925, 3 -0.3867857, 5 0.8461538, 6 0.75, 7 -0.9473684, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -0.904, 14 -1} -{0 1, 1 -1, 2 -0.6442105, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} -{0 -1, 1 1, 2 -0.4640602, 3 -0.9971429, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.7017544, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.54, 14 -1} -{0 -1, 1 -1, 2 -0.7368421, 3 -0.3928571, 5 0.5384615, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.7014925, 11 -1, 13 -0.92, 14 -0.9802} -{0 -1, 1 -1, 2 -0.7242105, 3 -0.9107143, 5 0.5384615, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -0.98382} -{0 -1, 1 1, 2 -0.7142857, 3 -0.09821429, 5 0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -0.88896} -{0 -1, 1 -1, 2 -0.5263158, 3 -0.9225, 4 -1, 5 1, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99974} -{0 -1, 1 -1, 2 -0.4511278, 3 -0.5714286, 5 -0.8461538, 6 -0.25, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.728, 14 -1} -{0 1, 1 1, 2 -0.6015038, 3 -0.8928571, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.9736842, 8 1, 9 -1, 10 -1, 11 1, 13 -0.74, 14 -0.9787} -{0 -1, 1 1, 2 -0.8321805, 3 -0.2203571, 5 0.07692308, 7 -0.9589474, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.8, 14 -0.99986} -{0 -1, 1 1, 2 -0.3383459, 3 -0.8275, 5 0.2307692, 6 -0.25, 7 -0.9912281, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.78, 14 -0.99998} -{0 -1, 1 1, 2 -0.847218, 3 -1, 5 0.5384615, 6 -0.25, 7 -0.9533333, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.99998} -{0 1, 1 -1, 2 -0.5488722, 3 -0.7321429, 5 0.07692308, 6 -0.25, 7 -0.9238596, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.629, 14 -1} -{0 1, 1 1, 2 -0.3783459, 3 -0.6964286, 5 -0.6923077, 7 -0.7719298, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.726, 14 -0.9878} -{0 -1, 1 -1, 2 -0.4135338, 3 -0.7857143, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.8596491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} -{0 1, 1 1, 2 0.2081202, 3 -0.3125, 5 0.3846154, 6 -0.25, 7 -0.3919298, 8 1, 9 1, 10 -0.8507463, 11 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.6541353, 3 -0.9285714, 5 -0.2307692, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -1} -{0 -1, 1 1, 2 -0.4384963, 3 -0.8453571, 4 -1, 5 -0.5384615, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} -{0 -1, 1 -1, 2 -0.7795489, 3 -0.6428571, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 1, 1 -1, 2 0.2857143, 3 0.1428571, 5 -0.3846154, 6 -1, 7 -1, 8 1, 9 1, 10 -0.5522388, 11 -1, 13 -1, 14 -0.99506} -{0 1, 1 1, 2 -0.443609, 3 -0.9882143, 4 -1, 5 0.07692308, 6 0.75, 7 -0.7719298, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.568, 14 -0.84} -{0 1, 1 -1, 2 -0.7969925, 3 -0.1546429, 5 0.07692308, 6 0.75, 7 -0.5789474, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.66, 14 -1} -{0 -1, 1 -1, 2 -0.5037594, 3 -0.6071429, 5 -0.5384615, 6 -0.25, 7 -0.6140351, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.9, 14 -1} -{0 -1, 1 -1, 2 -0.6742857, 3 -0.9521429, 5 -0.2307692, 6 0.75, 7 -0.877193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.6, 14 -1} -{0 1, 1 1, 2 -0.7166917, 3 -0.2053571, 5 1, 6 0.75, 7 -0.9677193, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 -1, 2 -0.4640602, 3 -0.1964286, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.816, 14 -0.896} -{0 1, 1 -1, 2 -0.4412029, 3 -0.9614286, 5 0.8461538, 6 -0.25, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.56, 14 -0.77646} -{0 1, 1 1, 2 -0.6941353, 3 -0.8928571, 5 -0.8461538, 6 0.75, 7 -0.8684211, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.8, 14 -0.99346} -{0 1, 1 1, 2 -0.3082707, 3 -0.9910714, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.768, 14 -0.99774} -{0 -1, 1 1, 2 -0.516391, 3 -0.9107143, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.776, 14 -1} -{0 1, 1 -1, 2 -0.6893233, 3 -0.9642857, 5 0.5384615, 6 0.75, 7 -0.9122807, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.98644} -{0 -1, 1 1, 2 -0.7768421, 3 -0.9821429, 4 -1, 5 0.07692308, 6 0.75, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99592} -{0 -1, 1 1, 2 -0.4685714, 3 0.1071429, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} -{0 1, 1 1, 2 -0.7269173, 3 -0.7857143, 5 -0.07692308, 6 -0.25, 7 -0.9094737, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.74, 14 -0.984} -{0 -1, 1 1, 2 -0.2857143, 3 -0.875, 4 -1, 5 0.07692308, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 1, 13 -0.836, 14 -0.992} -{0 -1, 1 -1, 2 -0.6667669, 3 -0.6785714, 5 0.2307692, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.64, 14 -0.99988} -{0 -1, 1 1, 2 -0.3209022, 3 -0.7292857, 5 0.2307692, 6 -0.25, 7 -0.9182456, 8 1, 9 -1, 10 -1, 11 1, 13 -0.8, 14 -1} -{0 1, 1 -1, 2 0.007518797, 3 -0.9464286, 5 0.5384615, 6 0.75, 7 -0.8070175, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.667, 14 -0.98216} -{0 -1, 1 1, 2 -0.4487217, 3 -0.7142857, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -1} -{0 -1, 1 -1, 2 -0.4938346, 3 -0.2382143, 5 0.5384615, 6 0.75, 7 -0.9940351, 8 -1, 9 1, 10 -0.641791, 11 1, 13 -0.871, 14 -0.99994} -{0 1, 1 1, 2 -0.5765414, 3 -0.89, 5 0.2307692, 6 -0.25, 7 -0.7368421, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.9, 14 -0.99994} -{0 -1, 1 1, 2 0.2354888, 3 0.1071429, 5 0.3846154, 6 1, 7 -1, 8 1, 9 1, 10 -0.4029851, 11 -1, 13 -0.848, 14 -0.9974} -{0 1, 1 1, 2 -0.9299248, 3 -0.9464286, 5 0.07692308, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.648, 14 -0.9862} -{0 -1, 1 1, 2 -0.6742857, 3 -0.1071429, 5 0.2307692, 6 -0.25, 7 -0.9385965, 8 1, 9 -1, 10 -1, 11 1, 13 -0.74, 14 -1} -{0 1, 1 1, 2 -0.4309775, 3 -0.6071429, 5 0.5384615, 6 0.75, 7 -0.6140351, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.592, 14 -0.98} -{0 1, 1 1, 2 -0.5061654, 3 -0.9642857, 5 0.07692308, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -0.968, 14 -0.9892} -{0 -1, 1 1, 2 -0.7443609, 3 -0.9671429, 5 -0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -0.9989} -{0 1, 1 1, 2 -0.1578947, 3 -0.9314286, 5 1, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.49, 14 -0.988} -{0 -1, 1 1, 2 -0.3106768, 3 -0.8571429, 5 -0.6923077, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.779, 14 -1} -{0 -1, 1 1, 2 -0.6366917, 3 -0.08321429, 5 0.8461538, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99996} -{0 1, 1 1, 2 -0.5136842, 3 -0.8689286, 5 0.07692308, 6 0.75, 7 -0.6957895, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -0.996} -{0 -1, 1 1, 2 -0.8096241, 3 -0.9821429, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -1} -{0 1, 1 1, 2 -0.8219549, 3 -0.9732143, 5 0.5384615, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.92, 14 -1} -{0 1, 1 1, 2 0.1329323, 3 -0.9971429, 5 1, 6 0.75, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.94} -{0 -1, 1 1, 2 0.4736842, 3 -0.5, 5 0.3846154, 6 1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99976} -{0 -1, 1 1, 2 -0.1930826, 3 -0.765, 5 -0.07692308, 6 -0.25, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.6, 14 -1} -{0 -1, 1 -1, 2 -0.922406, 3 -0.985, 5 -0.2307692, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.99998} -{0 -1, 1 1, 2 -0.5263158, 3 -0.9585714, 5 0.2307692, 6 -0.25, 7 -0.9796491, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.66, 14 -0.94394} -{0 -1, 1 1, 2 -0.3909774, 3 -0.6785714, 5 -0.2307692, 6 -0.25, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 1, 13 -0.76, 14 -1} -{0 1, 1 -1, 2 0.7392482, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} -{0 1, 1 1, 2 -0.1503759, 3 -0.9853571, 5 -0.6923077, 6 0.75, 7 -0.6403509, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.6, 14 -1} -{0 -1, 1 -1, 2 -0.7368421, 3 -0.2142857, 4 -1, 5 0.5384615, 6 -0.25, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 1, 13 -0.732, 14 -1} -{0 -1, 1 1, 2 -0.6790977, 3 -0.8571429, 5 0.3846154, 6 -0.75, 7 -0.9884211, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.68, 14 -0.974} -{0 1, 1 1, 2 -0.08030069, 3 -0.9642857, 5 -0.6923077, 6 0.75, 7 -0.6491228, 8 1, 9 -1, 10 -1, 11 1, 13 -0.68, 14 -1} -{0 1, 1 -1, 2 -0.7218045, 3 -0.1607143, 5 1, 6 0.75, 7 -0.9649123, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.7, 14 -0.98898} -{0 -1, 1 1, 2 -0.3783459, 3 -0.9046429, 5 -0.6923077, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.56, 14 -0.91} -{0 1, 1 1, 2 -0.7193985, 3 -0.1785714, 5 -0.6923077, 6 -0.25, 7 -0.754386, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.944, 14 -0.98516} -{0 -1, 1 1, 2 -0.633985, 3 -0.9375, 5 -0.5384615, 6 -0.25, 7 -0.9736842, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.826, 14 -0.99994} -{0 1, 1 -1, 2 -0.884812, 3 -0.3571429, 5 -0.2307692, 6 -0.25, 7 -0.9035088, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.7993985, 3 -0.9225, 5 0.5384615, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.892, 14 -0.99986} -{0 1, 1 1, 2 -0.4610526, 3 0.1546429, 5 -0.8461538, 6 -0.25, 7 -0.7894737, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.75, 14 -0.9854} -{0 -1, 1 -1, 2 0.3181955, 3 -0.8571429, 5 -1, 6 -1, 7 -0.5438596, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.9998} -{0 1, 1 1, 2 0.3810526, 3 -0.89, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 1, 13 -0.74, 14 -1} -{0 1, 1 -1, 2 0.5464661, 5 -1, 6 -1, 7 -1, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -1, 14 -0.972} -{0 -1, 1 1, 2 -0.5088722, 3 -0.9257143, 4 -1, 5 -0.6923077, 7 -0.9649123, 8 1, 9 1, 10 -0.7014925, 11 1, 13 -0.868, 14 -0.99944} -{0 1, 1 1, 2 0.04751886, 3 -0.5357143, 5 0.5384615, 6 0.75, 7 -0.5789474, 8 1, 9 -1, 10 -1, 11 1, 13 -0.65, 14 -1} -{0 -1, 1 -1, 2 -0.7043609, 3 -0.1785714, 4 -1, 5 -0.5384615, 6 0.75, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.98, 14 -0.99968} -{0 1, 1 1, 2 -0.8069173, 3 -0.3392857, 5 0.07692308, 6 -0.25, 7 -0.8831579, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.96, 14 -0.99944} -{0 1, 1 1, 2 0.03518791, 3 -0.4553571, 5 0.2307692, 6 0.75, 7 0.0877193, 8 1, 9 1, 10 -0.641791, 11 -1, 13 -1, 14 -0.9842} -{0 1, 1 1, 2 -0.7142857, 3 -0.8928571, 5 0.5384615, 6 -0.25, 7 -0.8333333, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -1, 14 -0.98836} -{0 -1, 1 1, 2 -0.443609, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.84, 14 -0.99998} -{0 -1, 1 1, 2 -0.403609, 3 -0.9760714, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} -{0 -1, 1 1, 2 -0.7043609, 3 -0.9671429, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.8157895, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.792, 14 -0.99306} -{0 -1, 1 1, 2 -0.9046617, 3 -0.9760714, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.8, 14 -1} -{0 -1, 1 -1, 2 -0.7870677, 3 -0.3928571, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99298} -{0 1, 1 -1, 2 0.4084211, 3 0.1785714, 5 0.5384615, 6 -0.25, 7 -0.2280702, 8 1, 9 -1, 10 -1, 11 1, 13 -0.979, 14 -0.78878} -{0 -1, 1 1, 2 -0.4640602, 3 -0.6428571, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.4035088, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 1, 1 -1, 2 -0.6616541, 3 -0.1192857, 5 0.8461538, 6 0.75, 7 -0.754386, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.6, 14 -0.99084} -{0 -1, 1 1, 2 -0.7669173, 3 -0.3035714, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -1} -{0 -1, 1 1, 2 -0.7993985, 3 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 1, 13 -0.816, 14 -1} -{0 -1, 1 -1, 2 -0.6541353, 3 -0.03571429, 4 -1, 5 -1, 6 -1, 7 -0.8596491, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.8, 14 -0.99998} -{0 1, 1 1, 2 -0.1254135, 3 -0.6696429, 5 0.5384615, 6 -0.25, 7 -0.6785965, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -1, 14 -1} -{0 1, 1 1, 2 -0.6114286, 3 -0.875, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9298246, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.84, 14 -0.88446} -{0 1, 1 1, 2 0.3257143, 3 -0.4971429, 5 -0.07692308, 6 -0.25, 7 -0.01754386, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.64, 14 -0.97336} -{0 1, 1 1, 2 0.2682706, 3 -0.1785714, 5 -1, 6 -1, 7 -0.6491228, 8 1, 9 1, 10 -0.8507463, 11 -1, 13 -1, 14 -0.82298} -{0 1, 1 1, 2 0.1302256, 3 -0.2857143, 5 -0.6923077, 7 -1, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.97502} -{0 -1, 1 1, 2 -0.215639, 3 -0.9642857, 5 -0.07692308, 6 -0.25, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.712, 14 -1} -{0 1, 1 1, 2 -0.5840602, 3 -0.8542857, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.63, 14 -0.9888} -{0 1, 1 1, 2 -0.5061654, 3 -0.5357143, 5 0.8461538, 6 -0.25, 7 -0.7807018, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -0.67, 14 -0.976} -{0 -1, 1 1, 2 0.1452632, 3 -0.8542857, 4 -1, 5 -1, 6 -1, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.99998} -{0 -1, 1 -1, 2 -0.6616541, 3 -0.2142857, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.6842105, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} -{0 -1, 1 1, 2 -0.521203, 3 -0.9464286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -1} -{0 1, 1 -1, 2 -0.4009023, 3 -0.9732143, 5 0.8461538, 6 -0.25, 7 -0.9736842, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.7, 14 -0.99912} -{0 1, 1 1, 2 -0.6390977, 3 -0.9464286, 5 0.07692308, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.651, 14 -0.99954} -{0 1, 1 -1, 2 -0.5512782, 3 -0.9257143, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.7, 14 -0.9714} -{0 1, 1 -1, 2 -0.8697744, 3 -0.9732143, 4 1, 5 0.8461538, 6 -1, 7 -0.2982456, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.7, 14 -1} -{0 1, 1 1, 2 -0.7993985, 3 -0.5, 5 0.07692308, 6 -0.25, 7 -0.8859649, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.8, 14 -0.97218} -{0 1, 1 1, 2 -0.887218, 3 0.5714286, 4 1, 5 -1, 6 0.5, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 12 1, 13 -0.55, 14 1} -{0 -1, 1 1, 2 -0.8697744, 3 -0.5178571, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -1} -{0 1, 1 1, 2 0.02015032, 3 -0.8214286, 5 -0.07692308, 7 -0.8245614, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.59, 14 -0.9498} -{0 1, 1 1, 2 0.3133834, 3 -0.3928571, 5 0.3846154, 6 0.75, 7 -0.5087719, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -1, 14 -1} -{0 1, 1 1, 2 -1, 3 -0.7142857, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.88, 14 -0.98} -{0 1, 1 1, 2 -0.8321805, 3 -0.3214286, 5 0.5384615, 6 -0.25, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 1, 13 -0.94, 14 -0.992} -{0 -1, 1 -1, 2 -0.7542857, 3 -0.1667857, 5 -0.5384615, 6 0.75, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.68, 14 -0.9999} -{0 -1, 1 1, 2 -0.884812, 3 -0.2857143, 5 0.2307692, 6 0.75, 7 -0.9884211, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.88, 14 -0.99998} -{0 -1, 1 1, 2 -0.366015, 3 -0.8214286, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.8, 14 -1} -{0 -1, 1 1, 2 -0.5362406, 3 -0.75, 5 0.2307692, 6 -0.25, 7 -0.754386, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.671, 14 -1} -{0 -1, 1 1, 2 -0.7693233, 3 -0.9464286, 4 -1, 5 0.6923077, 6 0.5, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.868, 14 -0.99996} -{0 -1, 1 1, 2 -0.8670677, 3 -0.2678571, 5 0.07692308, 6 0.75, 7 -0.9238596, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.68, 14 -0.99974} -{0 -1, 1 1, 2 -0.5714286, 3 -0.7857143, 5 0.2307692, 6 -0.25, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.7, 14 -0.99866} -{0 1, 1 -1, 2 -0.03518791, 3 -0.25, 5 0.5384615, 6 -0.25, 7 -0.6491228, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.7293233, 3 -0.1785714, 5 -0.6923077, 6 -0.25, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.4640602, 3 -0.75, 5 -0.8461538, 6 -0.25, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 1, 13 -0.7, 14 -1} -{0 1, 1 -1, 2 -0.7993985, 3 -0.4642857, 5 -0.5384615, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.84, 14 -0.99532} -{0 1, 1 -1, 2 -0.7744361, 3 -0.8332143, 5 -0.6923077, 7 -0.9649123, 8 1, 9 1, 10 -0.880597, 11 -1, 12 -1, 13 -0.92, 14 -1} -{0 1, 1 1, 2 -0.6114286, 3 -0.6964286, 5 0.8461538, 6 -0.25, 7 -0.6989474, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.88, 14 -1} -{0 -1, 1 -1, 2 -0.5915789, 3 -0.8810714, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.66, 14 -0.99998} -{0 1, 1 1, 2 -0.1479699, 3 -0.9257143, 5 0.2307692, 6 -0.25, 7 -0.6491228, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.5, 14 -0.8} -{0 -1, 1 -1, 2 -0.8646617, 3 -0.2857143, 5 0.2307692, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.88, 14 -0.99998} -{0 -1, 1 -1, 2 -0.556391, 3 -0.9285714, 5 0.5384615, 6 -0.25, 7 -0.9298246, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.833, 14 -0.99} -{0 1, 1 -1, 2 -0.7669173, 3 -0.5714286, 5 -0.2307692, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.92, 14 -0.98164} -{0 1, 1 1, 2 -0.7569925, 3 -0.2142857, 5 1, 6 -0.25, 7 -0.9796491, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.879, 14 -1} -{0 -1, 1 1, 2 -0.7542857, 3 -0.9642857, 5 0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.64, 14 -1} -{0 1, 1 1, 2 -0.4309775, 3 -0.3571429, 4 -1, 5 0.2307692, 6 0.75, 7 -0.6315789, 8 1, 9 -1, 10 -1, 11 1, 13 -0.846, 14 -1} -{0 -1, 1 -1, 2 -0.0502255, 3 -0.9285714, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.737, 14 -1} -{0 -1, 1 -1, 2 -0.7043609, 3 -0.9582143, 4 -1, 5 -1, 6 -1, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.99826} -{0 -1, 1 -1, 2 -0.8745865, 3 -0.9614286, 5 0.07692308, 6 -0.25, 7 -0.877193, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.92, 14 -0.9999} -{0 -1, 1 1, 2 -0.4210526, 3 -0.8214286, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.5087719, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} -{0 -1, 1 -1, 2 -0.7317293, 3 -0.9760714, 5 0.5384615, 6 -0.25, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.84, 14 -1} -{0 -1, 1 1, 2 -0.3708271, 3 -0.9228571, 5 -0.07692308, 6 -0.25, 7 -0.9182456, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.972, 14 -1} -{0 1, 1 1, 2 -0.521203, 3 -0.8989286, 5 0.2307692, 6 0.75, 7 -0.9473684, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.76, 14 -0.998} -{0 -1, 1 1, 2 -0.4562406, 3 -0.8214286, 5 -0.2307692, 6 -0.25, 7 -0.4736842, 8 1, 9 -1, 10 -1, 11 1, 13 -0.477, 14 -1} -{0 1, 1 -1, 2 -0.7918797, 3 -0.8689286, 5 0.5384615, 6 -0.25, 7 -0.8536842, 8 1, 9 1, 10 -0.8507463, 11 -1, 13 -0.78, 14 -0.94994} -{0 -1, 1 1, 2 -0.3984962, 3 -0.8035714, 5 -0.6923077, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -1} -{0 1, 1 1, 2 -0.7494737, 3 -0.9407143, 5 0.07692308, 6 0.75, 7 -0.8480702, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.872, 14 -1} -{0 1, 1 -1, 2 -0.3482707, 3 -0.1428571, 5 0.5384615, 6 0.75, 7 -0.01754386, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -1, 14 -0.8682} -{0 1, 1 1, 2 -0.4535338, 3 -0.6814286, 5 0.8461538, 6 0.75, 7 -0.5761404, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.689, 14 -0.994} -{0 -1, 1 -1, 2 -0.7317293, 3 -0.9435714, 5 -0.6923077, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.856, 14 -1} -{0 -1, 1 1, 2 -0.6114286, 3 0.04178571, 5 -0.6923077, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.822, 14 -1} -{0 1, 1 1, 2 -0.09022556, 3 -0.8571429, 5 -0.07692308, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -1, 14 -0.9997} -{0 -1, 1 1, 2 -0.5061654, 3 -0.9225, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.83, 14 -0.99642} -{0 -1, 1 1, 2 -0.2781955, 3 -0.5, 5 0.5384615, 6 0.75, 7 -0.1929825, 8 1, 9 1, 10 -0.7910448, 11 1, 13 -0.7, 14 -0.9999} -{0 -1, 1 1, 2 -0.8998496, 3 -0.9939286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -0.98556} -{0 -1, 1 1, 2 0.0652631, 3 -0.8364286, 5 -1, 6 -1, 7 -0.9796491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.99994} -{0 -1, 1 1, 2 -0.7242105, 3 -0.9878571, 5 -0.07692308, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.366015, 3 -0.9107143, 4 -1, 5 -0.6923077, 6 0.75, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} -{0 -1, 1 1, 2 -0.08270677, 3 -0.2142857, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.8947368, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -1, 14 -1} -{0 1, 1 1, 2 0.3759398, 3 -0.8035714, 5 0.2307692, 6 -0.25, 7 -0.877193, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.94, 14 -0.99884} -{0 1, 1 1, 2 -0.6466165, 3 -0.9732143, 5 -0.07692308, 6 -0.25, 7 -0.9824561, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.74, 14 -0.69784} -{0 -1, 1 -1, 2 -0.1630075, 3 -0.9257143, 5 -0.2307692, 6 -0.25, 7 -0.9533333, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -0.99526} -{0 -1, 1 1, 2 0.07759405, 3 0.3571429, 5 -1, 6 -1, 7 -1, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.906, 14 -1} -{0 -1, 1 -1, 2 -0.3933835, 3 -0.8867857, 4 -1, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.68, 14 -1} -{0 -1, 1 1, 2 -0.8369925, 3 -0.7142857, 4 -1, 5 -0.6923077, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.64, 14 -0.98} -{0 -1, 1 -1, 2 -0.6766917, 3 -0.8275, 4 -1, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -1} -{0 1, 1 1, 2 -0.7118797, 3 -0.8928571, 5 0.07692308, 6 0.75, 7 -0.9007018, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.578, 14 -0.996} -{0 -1, 1 1, 2 0.6667669, 3 -0.3571429, 5 -1, 6 -1, 7 -0.7192982, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.93, 14 -0.99988} -{0 1, 1 1, 2 0.02015032, 3 -0.9792857, 5 0.07692308, 7 0.05263158, 8 1, 9 1, 10 -0.4029851, 11 -1, 13 -1, 14 -0.7} -{0 -1, 1 -1, 2 -0.4135338, 3 -0.8214286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.99996} -{0 1, 1 1, 2 -0.112782, 3 -0.7857143, 5 0.5384615, 6 0.75, 7 -0.5789474, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -0.92, 14 -1} -{0 -1, 1 1, 2 -0.7218045, 3 -0.9553571, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.82, 14 -0.99998} -{0 -1, 1 1, 2 -0.3684211, 3 -0.8214286, 5 0.8461538, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.652, 14 -1} -{0 1, 1 1, 2 0.2881204, 3 0.3214286, 5 -0.8461538, 7 0.05263158, 8 1, 9 1, 10 -0.4925373, 11 1, 13 -1, 14 -1} -{0 1, 1 -1, 2 -0.08511284, 3 -0.5239286, 5 0.5384615, 6 -0.25, 7 -0.4824561, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -1, 14 -1} -{0 1, 1 -1, 2 -0.08030069, 3 -1, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.3834586, 3 -0.875, 5 0.2307692, 7 -0.9824561, 8 1, 9 -1, 10 -1, 11 1, 13 -0.837, 14 -1} -{0 -1, 1 -1, 2 -0.06015038, 3 -0.6725, 5 -0.5384615, 6 0.75, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.76, 14 -1} -{0 -1, 1 1, 2 -0.4938346, 3 -0.8064286, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.92, 14 -1} -{0 -1, 1 1, 2 -0.5813534, 3 -0.9464286, 5 0.5384615, 6 0.75, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.78, 14 -0.99498} -{0 -1, 1 1, 2 -0.8294737, 3 -0.4821429, 5 -0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.9, 14 -0.99998} -{0 1, 1 -1, 2 -0.1705263, 3 -0.9285714, 5 -0.6923077, 7 -0.8421053, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.994} -{0 -1, 1 -1, 2 -0.7067669, 3 -0.8928571, 5 0.2307692, 6 -0.25, 7 -0.9385965, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} -{0 1, 1 1, 2 -0.4610526, 3 -0.9407143, 5 1, 6 -0.25, 7 -0.9063158, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.697, 14 -0.9342} -{0 1, 1 -1, 2 -0.8772932, 3 -0.2142857, 5 1, 6 0.75, 7 -0.9298246, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.94} -{0 -1, 1 -1, 2 -0.4159399, 3 -0.8392857, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.8, 14 -0.99718} -{0 -1, 1 -1, 2 0.1654135, 3 -0.5, 5 -0.2307692, 6 0.75, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.6490226, 3 -0.9196429, 5 0.5384615, 6 -0.25, 7 -0.9094737, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.8, 14 -1} -{0 -1, 1 1, 2 -0.1930826, 3 -0.8928571, 5 -0.6923077, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.7, 14 -1} -{0 -1, 1 1, 2 -0.6941353, 3 -0.9582143, 4 -1, 5 0.8461538, 6 0.75, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -0.99998} -{0 1, 1 1, 2 0.2706767, 3 -0.1071429, 5 -0.5384615, 6 0.75, 7 -0.4385965, 8 1, 9 -1, 10 -1, 11 1, 13 -0.976, 14 -0.95944} -{0 1, 1 -1, 2 -0.556391, 3 -0.7828571, 4 -1, 5 1, 6 0.75, 7 -0.8217544, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.93, 14 -1} -{0 1, 1 1, 2 -0.4487217, 3 -0.7142857, 5 -0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 1, 13 -0.64, 14 -1} -{0 -1, 1 1, 2 -0.7768421, 3 -0.9375, 4 -1, 5 0.07692308, 6 0.75, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.99592} -{0 1, 1 1, 2 -0.3858647, 3 -0.345, 5 0.07692308, 6 -0.25, 7 -0.6842105, 8 1, 9 1, 10 -0.641791, 11 1, 13 -1, 14 -0.99558} -{0 -1, 1 1, 2 -0.112782, 3 0.8007142, 5 0.5384615, 6 0.75, 7 -0.9852632, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.24, 14 -0.9982} -{0 1, 1 -1, 2 -0.2631579, 3 -0.5714286, 5 -0.5384615, 6 -0.25, 7 -0.9298246, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 1, 1 1, 2 -0.2881204, 3 -0.8542857, 5 0.2307692, 6 -0.25, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 1, 13 -0.6, 14 -0.884} -{0 -1, 1 1, 2 -0.516391, 3 -0.8542857, 4 -1, 5 1, 6 0.75, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.872, 14 -0.99998} -{0 -1, 1 1, 2 -0.290827, 3 -0.8096429, 5 0.8461538, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.98998} -{0 1, 1 1, 2 -0.4712782, 3 0.3928571, 5 0.07692308, 6 -0.25, 7 -0.5087719, 8 1, 9 1, 10 -0.5223881, 11 -1, 13 -1, 14 -0.9} -{0 -1, 1 1, 2 -0.328421, 3 -0.8185714, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.98} -{0 1, 1 1, 2 -0.7969925, 3 -0.8275, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.8, 14 -0.94} -{0 -1, 1 1, 2 0.005112722, 3 -0.5832143, 5 0.2307692, 6 -0.25, 7 -0.6140351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.535, 14 -0.997} -{0 -1, 1 1, 2 -0.7518797, 3 -0.4403571, 4 -1, 5 -0.6923077, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.816, 14 -1} -{0 1, 1 1, 2 -0.7969925, 3 -0.2857143, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8245614, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.96, 14 -1} -{0 1, 1 1, 2 -0.3633083, 3 -0.8214286, 5 0.2307692, 6 -0.25, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -0.761, 14 -0.996} -{0 -1, 1 1, 2 -0.6893233, 3 -0.9375, 5 -0.07692308, 6 -0.25, 7 -0.9940351, 8 -1, 9 1, 10 -0.880597, 11 -1, 13 -0.746, 14 -0.961} -{0 1, 1 1, 2 -0.290827, 3 -0.5357143, 5 -0.07692308, 6 0.75, 7 -0.7017544, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.907, 14 -1} -{0 -1, 1 -1, 2 -0.7894737, 3 -0.3185714, 5 -0.6923077, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.98} -{0 1, 1 1, 2 -0.3106768, 3 -0.7678571, 5 0.5384615, 6 0.75, 7 -0.3684211, 8 1, 9 -1, 10 -1, 11 1, 13 -0.898, 14 -0.98722} -{0 1, 1 1, 2 -0.7344361, 3 -0.2828571, 5 1, 6 -0.25, 7 -0.997193, 8 1, 9 1, 10 -0.7313433, 11 -1, 13 -0.94, 14 -0.99208} -{0 1, 1 -1, 2 -0.6039098, 3 -0.03571429, 5 0.5384615, 6 0.75, 7 -0.6491228, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -0.9} -{0 1, 1 -1, 2 -0.009924872, 3 -0.9671429, 5 0.8461538, 6 0.75, 7 -0.9708772, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.56, 14 -0.99988} -{0 -1, 1 -1, 2 0.1554887, 3 -1, 4 -1, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.2354888, 3 -0.8214286, 4 -1, 5 -0.6923077, 6 0.75, 7 -0.2982456, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.8, 14 -1} -{0 1, 1 1, 2 -0.2354888, 3 -0.8839286, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.7014925, 11 -1, 13 -0.814, 14 -0.906} -{0 -1, 1 -1, 2 -0.5813534, 3 -0.8542857, 5 0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -0.999} -{0 1, 1 1, 2 -0.8369925, 3 -0.3214286, 5 0.2307692, 6 -0.25, 7 -0.8947368, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.88, 14 -0.95588} -{0 1, 1 1, 2 -0.2255639, 3 -0.6964286, 5 0.07692308, 7 -0.5438596, 8 1, 9 1, 10 -0.5223881, 11 -1, 13 -0.883, 14 -0.9758} -{0 -1, 1 1, 2 -0.3181955, 3 -0.9464286, 4 -1, 5 -0.8461538, 6 -0.25, 7 -0.9589474, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.76, 14 -0.99994} -{0 1, 1 1, 2 -0.6264662, 3 -0.9821429, 5 -0.6923077, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.22797, 3 -0.8778571, 4 -1, 5 -0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.6, 14 -1} -{0 1, 1 1, 2 -0.152782, 3 -0.97, 5 0.07692308, 6 0.75, 7 -0.9852632, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.78, 14 -0.98104} -{0 1, 1 1, 2 -0.7720301, 3 -0.4642857, 5 -0.2307692, 6 -0.25, 7 -0.9007018, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.92, 14 -0.804} -{0 -1, 1 -1, 2 -0.8096241, 3 -0.9107143, 5 0.07692308, 6 -0.25, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.5840602, 3 -0.7857143, 5 -0.07692308, 6 -0.25, 7 -0.8042105, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.72, 14 -0.9998} -{0 -1, 1 1, 2 -0.7645113, 3 -0.9435714, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.9533333, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} -{0 1, 1 1, 2 -0.5639098, 3 -0.6339286, 5 1, 6 -0.25, 7 -0.6666667, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.58, 14 -0.99986} -{0 -1, 1 1, 2 -0.6039098, 3 -0.8392857, 5 -0.6923077, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.36, 14 -0.92} -{0 1, 1 -1, 2 -0.8595489, 3 -0.3392857, 5 0.5384615, 6 -0.25, 7 -0.9150877, 8 1, 9 1, 10 -0.880597, 11 -1, 13 -0.94, 14 -0.9892} -{0 1, 1 -1, 2 -0.7142857, 3 -0.5803571, 5 0.5384615, 6 -0.25, 7 -0.7775439, 8 1, 9 1, 10 -0.7014925, 11 -1, 13 -0.88, 14 -0.9951} -{0 -1, 1 1, 2 -0.7043609, 3 -0.8721429, 5 0.07692308, 6 -0.25, 7 -0.9621053, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.864, 14 -0.99998} -{0 1, 1 1, 2 -0.5615038, 3 -0.6428571, 5 0.2307692, 6 -0.25, 7 -0.2280702, 8 1, 9 -1, 10 -1, 11 1, 13 -0.93, 14 -1} -{0 -1, 1 1, 2 -0.6415038, 3 -0.8421429, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.7192982, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.812, 14 -1} -{0 -1, 1 -1, 2 -0.553985, 3 -0.8810714, 5 0.5384615, 6 -0.25, 7 -0.8305263, 8 1, 9 -1, 10 -1, 11 1, 13 -0.56, 14 -1} -{0 -1, 1 1, 2 -0.7242105, 3 -0.7739286, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.97884} -{0 -1, 1 -1, 2 -0.6766917, 3 -0.9257143, 4 -1, 5 -1, 6 -1, 7 -0.9649123, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.82, 14 -0.99706} -{0 -1, 1 1, 2 -0.6691729, 3 -0.9614286, 5 -0.07692308, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -0.99998} -{0 1, 1 1, 2 -0.4511278, 3 -0.875, 4 -1, 5 0.3846154, 6 0.75, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 1, 13 -0.607, 14 -1} -{0 -1, 1 1, 2 0.03248126, 3 -0.7321429, 5 -0.6923077, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -0.99996} -{0 1, 1 -1, 2 -0.558797, 3 -0.75, 5 0.2307692, 6 -0.25, 7 -0.9414035, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.72, 14 -1} -{0 -1, 1 1, 2 -0.6490226, 3 -0.9614286, 5 0.2307692, 6 -0.25, 7 -0.9884211, 8 -1, 9 1, 10 -0.9701493, 11 -1, 13 -0.728, 14 -0.99112} -{0 -1, 1 1, 2 -0.8547368, 3 -0.265, 5 -1, 6 -1, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -1} -{0 -1, 1 1, 2 -0.7618045, 3 -0.9167857, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.8245614, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.82, 14 -0.9996} -{0 -1, 1 1, 2 -0.6742857, 3 -0.9107143, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.89, 14 -1} -{0 -1, 1 1, 2 -0.922406, 3 -0.7082143, 5 -0.6923077, 6 0.75, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -1} -{0 -1, 1 1, 2 -0.6090226, 3 -0.8571429, 5 -0.8461538, 6 -0.25, 7 -0.9473684, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.92, 14 -1} -{0 1, 1 1, 2 0.03518791, 3 -0.75, 5 -0.2307692, 6 -0.25, 7 -0.754386, 8 1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.77, 14 -1} -{0 -1, 1 1, 2 -0.7067669, 3 -0.8035714, 5 -1, 6 -1, 7 -0.6842105, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.9995} -{0 1, 1 -1, 2 -0.1804511, 3 -0.8542857, 4 -1, 5 0.5384615, 6 0.75, 7 -0.9912281, 8 1, 9 1, 10 -0.3134328, 11 1, 13 -0.545, 14 -0.97528} -{0 1, 1 1, 2 -0.3557895, 3 0.7946429, 5 1, 6 0.75, 7 -0.8859649, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.485, 14 -0.99} -{0 -1, 1 1, 2 -0.6992481, 3 -0.1428571, 5 0.07692308, 6 -0.25, 7 -0.8536842, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.92, 14 -1} -{0 -1, 1 1, 2 -0.8520301, 3 -0.6428571, 5 0.5384615, 6 -0.25, 7 -0.9736842, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -0.99924} -{0 -1, 1 1, 2 -0.5013534, 3 -0.9642857, 5 -0.8461538, 6 0.75, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.748, 14 -1} -{0 -1, 1 -1, 2 -0.8195489, 3 -0.9464286, 5 0.07692308, 6 -0.25, 7 -0.9442105, 8 1, 9 1, 10 -0.8507463, 11 1, 13 -0.86, 14 -0.9999} -{0 -1, 1 1, 2 -0.6264662, 3 -0.9403571, 5 0.8461538, 6 -0.25, 7 -0.9182456, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 1, 2 -0.5488722, 3 -0.8928571, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.9955} -{0 1, 1 1, 2 -0.5512782, 3 -0.3332143, 5 0.5384615, 6 0.75, 7 -0.6024561, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.619, 14 -0.99664} -{0 1, 1 1, 2 -0.6315789, 3 -0.9285714, 5 0.5384615, 6 -0.25, 7 -0.877193, 8 1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} -{0 -1, 1 1, 2 -0.7067669, 3 -0.7739286, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9708772, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.72, 14 -0.9984} -{0 -1, 1 1, 2 -0.6216541, 3 -0.07142857, 5 0.3846154, 6 -0.75, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.86, 14 -0.9778} -{0 1, 1 1, 2 0.2204512, 3 -0.5178571, 5 0.07692308, 6 0.75, 7 -0.8157895, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -1, 14 -0.99432} -{0 -1, 1 1, 2 -0.4640602, 3 -0.9732143, 5 -0.8461538, 6 -0.25, 7 -0.9385965, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.072, 14 -1} -{0 -1, 1 -1, 2 -0.6541353, 3 -0.1071429, 5 -0.8461538, 6 -0.25, 7 -0.9298246, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.82, 14 -0.97876} -{0 1, 1 1, 2 -0.4159399, 3 -0.7739286, 4 -1, 5 1, 6 -0.25, 7 -0.7778947, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.62, 14 -1} -{0 -1, 1 1, 2 -0.2255639, 3 -0.8839286, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99368} -{0 -1, 1 -1, 2 -0.8821053, 3 -1, 4 -1, 5 -0.3846154, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.914, 14 -1} -{0 1, 1 1, 2 -0.6941353, 3 -0.9525, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 1, 1 1, 2 -0.6114286, 3 -0.8064286, 4 -1, 5 0.8461538, 6 -0.25, 7 -0.6315789, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.789, 14 -1} -{0 -1, 1 -1, 2 -0.7368421, 3 -0.9703571, 5 -0.6923077, 6 -0.25, 7 -0.9764912, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.856, 14 -1} -{0 1, 1 1, 2 -0.2129324, 3 -0.9614286, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9649123, 8 1, 9 1, 10 -0.9104478, 11 -1, 13 -0.8, 14 -0.98} -{0 1, 1 -1, 2 -0.6291729, 3 -0.3810714, 5 -0.2307692, 6 -0.25, 7 -0.9007018, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -0.997} -{0 -1, 1 1, 2 -0.8120301, 3 -1, 5 -0.8461538, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.856, 14 -1} -{0 -1, 1 1, 2 -0.4640602, 3 -0.7142857, 4 -1, 5 -0.6923077, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.589, 14 -1} -{0 -1, 1 1, 2 -0.6090226, 3 -0.6785714, 4 -1, 5 0.07692308, 7 -0.8245614, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.9758} -{0 -1, 1 -1, 2 -0.6640602, 3 -0.9107143, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -1} -{0 -1, 1 -1, 2 -0.443609, 3 -0.8928571, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.628, 14 -0.99756} -{0 -1, 1 1, 2 -0.8821053, 3 -0.6814286, 5 0.07692308, 6 -0.25, 7 -0.9824561, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 -0.92, 14 -1} -{0 1, 1 -1, 2 -0.2781955, 3 -0.6071429, 5 0.5384615, 6 -0.25, 7 -0.9912281, 8 1, 9 -1, 10 -1, 11 1, 13 -0.772, 14 -1} -{0 1, 1 1, 2 -0.7317293, 3 -0.8185714, 4 -1, 5 0.07692308, 6 0.75, 7 -0.8185965, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.8745865, 3 -0.2707143, 5 -1, 6 -1, 7 -1, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.999} -{0 1, 1 1, 2 -0.6790977, 3 -0.1189286, 5 0.5384615, 6 0.75, 7 -0.8887719, 8 1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -1} -{0 1, 1 -1, 2 -0.6390977, 3 -0.9642857, 5 0.07692308, 6 0.75, 7 -0.9385965, 8 1, 9 -1, 10 -1, 11 1, 13 -0.509, 14 -1} -{0 -1, 1 1, 2 -0.6264662, 3 -0.1071429, 4 -1, 5 -0.5384615, 6 0.75, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 1, 13 -1, 14 -0.99966} -{0 -1, 1 -1, 2 -0.7293233, 3 -0.5596429, 5 -0.2307692, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.78, 14 -0.98} -{0 -1, 1 1, 2 -0.7218045, 3 -0.9464286, 5 -0.07692308, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.68, 14 -1} -{0 -1, 1 1, 2 -0.6415038, 3 -0.9792857, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8947368, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} -{0 1, 1 1, 2 0.04751886, 3 -0.9853571, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9824561, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -0.62, 14 -0.94536} -{0 -1, 1 1, 2 -0.7768421, 3 -1, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.3533835, 3 0.1785714, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.7192982, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -1} -{0 1, 1 -1, 2 -0.7242105, 3 -0.1725, 5 0.8461538, 6 -0.25, 7 -0.997193, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.97302} -{0 -1, 1 -1, 2 0.03518791, 3 -0.9046429, 5 -0.6923077, 6 0.5, 7 -0.9764912, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9976} -{0 1, 1 1, 2 -0.1203008, 3 -0.9792857, 4 -1, 5 0.8461538, 6 0.75, 7 -0.877193, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -0.9, 14 -0.9925} -{0 1, 1 1, 2 -0.4640602, 3 -0.25, 5 1, 6 -0.25, 7 -0.5438596, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.7918797, 3 -0.9703571, 5 0.07692308, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.99912} -{0 1, 1 -1, 2 -0.847218, 3 -0.3185714, 5 -0.2307692, 6 -0.25, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.9, 14 -1} -{0 1, 1 -1, 2 -0.5888722, 3 0.03571429, 5 1, 6 0.75, 7 -0.7835088, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.88, 14 -0.99978} -{0 1, 1 1, 2 -0.1804511, 3 -0.9971429, 5 0.3846154, 6 -0.25, 7 -0.997193, 8 -1, 9 1, 10 -0.9701493, 11 -1, 12 -1, 13 -0.44, 14 -1} +% JvR: Rest of dataset truncated for space reasons. \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40966/data.arff b/sklearn/datasets/tests/mock_openml/40966/data.arff index f1eecad7af148..1140d5a0482e9 100644 --- a/sklearn/datasets/tests/mock_openml/40966/data.arff +++ b/sklearn/datasets/tests/mock_openml/40966/data.arff @@ -89,4 +89,4 @@ '309_5',0.434940244,0.617429838,0.358802202,2.36578488,4.718678663,0.213105949,0.173626964,2.134013697,0.192157916,1.504229891,0.550960118,0.286961192,0.363502081,0.277964281,0.864912045,0.507989795,1.480059084,2.013696791,0.483416141,0.687793742,0.367530549,0.355310863,0.174835504,1.324694508,2.896334094,1.35987646,0.250704982,0.273667249,0.702699073,0.154827447,0.398549752,2.456559688,0.329125822,0.408755203,0.313414798,0.691956493,0.536860481,0.360816436,0.512823956,0.35155096,0.312206258,0.419094938,0.393447026,0.16020025,0.768112919,0.185718259,1.645807259,0.29682937,0.309345015,1.206994855,0.164650257,0.16068697,0.188221388,0.104783757,0.141983034,0.167709637,0.136837714,0.116047838,0.255527743,0.140870533,0.481226533,0.25177305,1.534835211,2.009108608,0.119524406,0.997774997,0.878667779,0.205604228,0.129954109,?,0.104783757,0.110693923,0.434153803,0.118481435,0.140314282,0.148379919,1.839730218,'Control','Memantine','C/S','c-CS-m' '309_6',0.447506385,0.62817583,0.36738809,2.38593897,4.807635435,0.218577766,0.176233365,2.14128243,0.195187525,1.442398172,0.566339562,0.289823901,0.363892996,0.26683694,0.85912085,0.521306627,1.538244388,1.968275306,0.495899987,0.672402205,0.36940449,0.357171663,0.179728458,1.227449926,2.956983466,1.447909665,0.250840167,0.284043554,0.704395752,0.156875924,0.391047184,2.467132679,0.327597795,0.404489851,0.296276381,0.674418605,0.539723081,0.354214276,0.51431644,0.347224089,0.303132141,0.412824304,0.382578304,0.162330317,0.77969457,0.186792986,1.634615385,0.28803733,0.332367081,1.12344457,0.175692873,0.150593891,0.183823529,0.106476244,0.13956448,0.174844457,0.130514706,0.115243213,0.236849548,0.13645362,0.478577489,0.244485294,1.507777149,2.003535068,0.120687217,0.920178167,0.843679299,0.190469457,0.131575226,?,0.106476244,0.109445701,0.439833145,0.11665724,0.140766403,0.14218043,1.816388575,'Control','Memantine','C/S','c-CS-m' '309_7',0.428032684,0.573695789,0.342708988,2.334223759,4.473130107,0.225172847,0.184003771,2.012413576,0.195788812,1.612036455,0.509899434,0.299654305,0.37115022,0.277655563,0.844280327,0.485386549,1.494814582,2.01257071,0.497485858,0.646134507,0.395977373,0.359522313,0.186046512,1.10779384,2.599622879,1.364236329,0.261470773,0.276241358,0.693117536,0.162162162,0.405562539,2.288812068,0.345380264,0.427561282,0.333909491,0.757542426,0.558610937,0.368950346,0.544626021,0.360307982,0.329352608,0.420490258,0.465116279,0.145565999,0.70224765,0.177033102,1.773845525,0.292194524,0.266857376,1.03228443,0.147854516,0.149816101,0.181610135,0.097834083,0.142787086,0.15185942,0.115978749,0.114752758,0.22451982,0.144830405,0.415529219,0.238005721,1.338782182,1.861708214,0.117041275,1.028769922,0.798283613,0.181610135,0.141806293,?,0.097834083,0.111483449,0.406293421,0.13722926,0.156681651,0.157498978,1.528483858,'Control','Memantine','C/S','c-CS-m' -% JvR: pruned the rest of the file for space reasons +% JvR: Rest of dataset truncated for space reasons. \ No newline at end of file diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 1b987ab3bede5..a4990808efd6e 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -24,12 +24,10 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, expect_sparse): - # fetch with version data_by_name_id = fetch_openml(name=data_name, version=data_version, cache=False) assert int(data_by_name_id.details['id']) == data_id - # fetch without version fetch_openml(name=data_name, cache=False) # without specifying the version, there is no guarantee that the data id # will be the same @@ -151,7 +149,8 @@ def test_fetch_openml_anneal(monkeypatch): data_id = 2 data_name = 'anneal' data_version = 1 - expected_observations = 898 + # Not all original instances included for space reasons + expected_observations = 11 expected_features = 38 _monkey_patch_webbased_functions(monkeypatch, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, @@ -180,7 +179,8 @@ def test_fetch_openml_australian(monkeypatch): data_id = 292 data_name = 'Australian' data_version = 1 - expected_observations = 690 + # Not all original instances included for space reasons + expected_observations = 85 expected_features = 14 _monkey_patch_webbased_functions(monkeypatch, data_id) assert_warns_message( @@ -199,6 +199,7 @@ def test_fetch_openml_miceprotein(monkeypatch): data_id = 40966 data_name = 'MiceProtein' data_version = 4 + # Not all original instances included for space reasons expected_observations = 7 expected_features = 77 _monkey_patch_webbased_functions(monkeypatch, data_id) @@ -231,12 +232,12 @@ def test_fetch_openml_inactive(monkeypatch): def test_fetch_nonexiting(monkeypatch): - # makes contact with openml server. not mocked # there is no active version of glass2 data_id = 40675 _monkey_patch_webbased_functions(monkeypatch, data_id) + # Note that we only want to search by name (not data id) assert_raise_message(ValueError, "No active dataset glass2 found", - fetch_openml, data_id=None, name='glass2', cache=False) + fetch_openml, name='glass2', cache=False) def test_fetch_openml_raises_illegal_argument(): From defb1a67f62979717cdc62a7494fb6ccca230276 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 02:18:49 -0400 Subject: [PATCH 062/138] changed arff import --- sklearn/datasets/openml.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 965be73378df8..06bdbf3715a16 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -13,9 +13,9 @@ import numpy as np +import sklearn.externals.arff as arff from .base import get_data_home -from sklearn.externals.arff import loads from ..externals.joblib import Memory from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch @@ -173,12 +173,12 @@ def _download_data_arff(file_id): response = urlopen(url) if sys.version_info[0] == 2: # Python2.7 numpy can't handle unicode? - arff = loads(response.read()) + arff_file = arff.loads(response.read()) else: - arff = loads(response.read().decode('utf-8')) + arff_file = arff.loads(response.read().decode('utf-8')) response.close() - return arff + return arff_file def _convert_numericals(data, name_feature): From b731b0dadd63e3192393e9e76d0b71fd1b3b09cd Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 11:14:44 -0400 Subject: [PATCH 063/138] fixed line lengths --- sklearn/datasets/openml.py | 6 +++--- sklearn/datasets/tests/test_openml.py | 9 +++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 06bdbf3715a16..c12d22ae68fba 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -159,7 +159,7 @@ def _get_data_description_by_id(data_id): def _get_data_features(data_id): - # OpenML API fn: https://www.openml.org/api_docs#!/data/get_data_features_id + # OpenML fn: https://www.openml.org/api_docs#!/data/get_data_features_id url = _DATA_FEATURES.format(data_id) error_message = "Dataset with id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True) @@ -259,8 +259,8 @@ def mem(func): if data_id is not None: raise ValueError( "Dataset data_id={} and name={} passed, but you can only " - "specify a numeric data_id or a name, not both.".format(data_id, - name)) + "specify a numeric data_id or a name, not " + "both.".format(data_id, name)) data_info = _get_data_info_by_name_(name, version) data_id = data_info['did'] elif data_id is not None: diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index a4990808efd6e..7e22c1b072bc0 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -124,8 +124,8 @@ def _mock_urlopen(url): elif url.startswith(url_prefix_data_description): return _mock_urlopen_data_description(url) else: - raise ValueError('Unknown mocking URL pattern (this should never ' + - 'happen): %s' % url) + # This should never happen + raise ValueError('Unknown mocking URL pattern: %s' % url) context.setattr(sklearn.datasets.openml, 'urlopen', _mock_urlopen) @@ -245,11 +245,12 @@ def test_fetch_openml_raises_illegal_argument(): fetch_openml, data_id=-1, name="name") assert_raise_message(ValueError, "Dataset data_id=", - fetch_openml, data_id=-1, name=None, version="version") + fetch_openml, data_id=-1, name=None, + version="version") assert_raise_message(ValueError, "Dataset data_id=", fetch_openml, data_id=-1, name="name", version="version") - assert_raise_message(ValueError, "Neither name nor data_id are provided. " + + assert_raise_message(ValueError, "Neither name nor data_id are provided. " "Please provide name or data_id.", fetch_openml) From c7faee20f9155f7ca67ecbfdb7a9146a23ecec31 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 12:22:48 -0400 Subject: [PATCH 064/138] extended unit test by checking the output data arrays --- doc/datasets/openml.rst | 2 +- sklearn/datasets/openml.py | 8 +++++++- sklearn/datasets/tests/test_openml.py | 27 ++++++++++++++------------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index fa649c588d720..4410a47129928 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -30,7 +30,7 @@ The dataset contains a total of 1080 examples belonging to 8 different classes:: (1080, 77) >>> mice.target.shape (1080,) - >>> np.unique(mice.target) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS + >>> np.unique(mice.target) # doctest: +NORMALIZE_WHITESPACE array(['c-CS-m', 'c-CS-s', 'c-SC-m', 'c-SC-s', 't-CS-m', 't-CS-s', 't-SC-m', 't-SC-s'], dtype=object) You can get more information on the dataset by looking at the ``DESCR`` diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index c12d22ae68fba..b26ccb2221e39 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -302,7 +302,13 @@ def mem(func): data = _convert_numericals(data, name_feature) if target_column_name is not None: - y = data[:, int(name_feature[target_column_name]['index'])] + # determine vector type + if name_feature[target_column_name]['data_type'] == "numeric": + dtype = np.float64 + else: + dtype = object + y = np.array(data[:, int(name_feature[target_column_name]['index'])], + dtype=dtype) else: y = None diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 7e22c1b072bc0..6d439ea906520 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -23,6 +23,7 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, + exptected_data_dtype, exptected_target_dtype, expect_sparse): data_by_name_id = fetch_openml(name=data_name, version=data_version, cache=False) @@ -37,6 +38,8 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, assert data_by_id.details['name'] == data_name assert data_by_id.data.shape == (expected_observations, expected_features) assert data_by_id.target.shape == (expected_observations, ) + assert data_by_id.data.dtype == exptected_data_dtype + assert data_by_id.target.dtype == exptected_target_dtype if expect_sparse: assert isinstance(data_by_id.data, scipy.sparse.csr_matrix) else: @@ -141,7 +144,7 @@ def test_fetch_openml_iris(monkeypatch): _monkey_patch_webbased_functions(monkeypatch, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, - expect_sparse=False) + np.float64, object, expect_sparse=False) def test_fetch_openml_anneal(monkeypatch): @@ -155,7 +158,7 @@ def test_fetch_openml_anneal(monkeypatch): _monkey_patch_webbased_functions(monkeypatch, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, - expect_sparse=False) + object, object, expect_sparse=False) def test_fetch_openml_cpu(monkeypatch): @@ -168,7 +171,7 @@ def test_fetch_openml_cpu(monkeypatch): _monkey_patch_webbased_functions(monkeypatch, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, - expect_sparse=False) + object, np.float64, expect_sparse=False) def test_fetch_openml_australian(monkeypatch): @@ -191,11 +194,17 @@ def test_fetch_openml_australian(monkeypatch): 'data_version': data_version, 'expected_observations': expected_observations, 'expected_features': expected_features, - 'expect_sparse': False} + 'expect_sparse': False, + 'exptected_data_dtype': np.float64, + 'exptected_target_dtype': object} ) def test_fetch_openml_miceprotein(monkeypatch): + # JvR: very important check, as this dataset defined several row ids + # and ignore attributes. Note that data_features json has 82 attributes, + # and row id (1), ignore attributes (3) have been removed (and target is + # stored in data.target) data_id = 40966 data_name = 'MiceProtein' data_version = 4 @@ -205,18 +214,10 @@ def test_fetch_openml_miceprotein(monkeypatch): _monkey_patch_webbased_functions(monkeypatch, data_id) data = fetch_dataset_from_openml(data_id, data_name, data_version, expected_observations, expected_features, - expect_sparse=False) - # JvR: very important check, as this dataset defined several row ids - # and ignore attributes. Note that data_features json has 82 attributes, - # and row id (1), ignore attributes (3) have been removed (and target is - # stored in data.target) - assert (data.data.shape == (expected_observations, expected_features)) - assert (data.target.shape == (expected_observations, )) - assert (data.data.dtype == np.float64) + np.float64, object, expect_sparse=False) def test_fetch_openml_inactive(monkeypatch): - # makes contact with openml server. not mocked # fetch inactive dataset by id data_id = 40675 _monkey_patch_webbased_functions(monkeypatch, data_id) From a8dec37c419303f6b33d1fc348ec5cbad2114e68 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 14:45:41 -0400 Subject: [PATCH 065/138] removed unused variable --- sklearn/datasets/tests/test_openml.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 6d439ea906520..13369cb1e96a0 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -212,9 +212,9 @@ def test_fetch_openml_miceprotein(monkeypatch): expected_observations = 7 expected_features = 77 _monkey_patch_webbased_functions(monkeypatch, data_id) - data = fetch_dataset_from_openml(data_id, data_name, data_version, - expected_observations, expected_features, - np.float64, object, expect_sparse=False) + fetch_dataset_from_openml(data_id, data_name, data_version, + expected_observations, expected_features, + np.float64, object, expect_sparse=False) def test_fetch_openml_inactive(monkeypatch): From 26b5c28fc56621c6357d33d9c312a75862c588f6 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 15:00:18 -0400 Subject: [PATCH 066/138] aligned whatsnew --- doc/whats_new/v0.20.rst | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/whats_new/v0.20.rst b/doc/whats_new/v0.20.rst index 20a6926295955..572f391b6b003 100644 --- a/doc/whats_new/v0.20.rst +++ b/doc/whats_new/v0.20.rst @@ -192,10 +192,9 @@ Misc Datasets - Added :func:`datasets.fetch_openml` to fetch datasets from `OpenML `. - -OpenML is a free, open data sharing platform and will be used instead of mldata -as it provides better service availability. :issue:`9908` by `Andreas Müller`_ -and :user:`Jan N. van Rijn `. + OpenML is a free, open data sharing platform and will be used instead of mldata + as it provides better service availability. :issue:`9908` by `Andreas Müller`_ + and :user:`Jan N. van Rijn `. Enhancements ............ From 440eb8655c92de01e5ce45a16ae3d6138c7374f2 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 15:16:33 -0400 Subject: [PATCH 067/138] changed line size --- sklearn/datasets/openml.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index b26ccb2221e39..b0812ec317b6c 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -45,9 +45,9 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error): raise_if_error : bool Whether to raise an error if OpenML returns an acceptable error (e.g., - date not found). If this argument is set to False, a None is returned in - case of acceptable errors. Note that all other errors (e.g., 404) will - still be raised as normal. + date not found). If this argument is set to False, a None is returned + in case of acceptable errors. Note that all other errors (e.g., 404) + will still be raised as normal. Returns ------- From 68ffecedbf1cecda0ca6816d3eee9f6a2075c8b9 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 16:01:45 -0400 Subject: [PATCH 068/138] name lower case See: https://github.com/openml/OpenML/issues/766 --- sklearn/datasets/openml.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index b0812ec317b6c..c08f3edb4645b 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -202,7 +202,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, Parameters ---------- - name : string + name : str String identifier of the dataset. Note that OpenML can have multiple datasets with the same name. @@ -256,6 +256,7 @@ def mem(func): # check legal function arguments. data_id XOR (name, version) should be # provided if name is not None: + name = name.lower() if data_id is not None: raise ValueError( "Dataset data_id={} and name={} passed, but you can only " From 1cec31bbb6eed4e58ae8cd32cae44ca119cffa1d Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 16:41:28 -0400 Subject: [PATCH 069/138] renamed mock files (to lowercase) small textual suggestions by olivier --- sklearn/datasets/openml.py | 28 ++++++++++--------- ...1_active.json => australian_1_active.json} | 0 ...ted.json => australian_1_deactivated.json} | 0 ...ctive.json => australian_None_active.json} | 0 ..._active.json => miceprotein_4_active.json} | 0 ...tive.json => miceprotein_None_active.json} | 0 sklearn/datasets/tests/test_openml.py | 6 ++-- 7 files changed, 18 insertions(+), 16 deletions(-) rename sklearn/datasets/tests/mock_openml/292/{Australian_1_active.json => australian_1_active.json} (100%) rename sklearn/datasets/tests/mock_openml/292/{Australian_1_deactivated.json => australian_1_deactivated.json} (100%) rename sklearn/datasets/tests/mock_openml/292/{Australian_None_active.json => australian_None_active.json} (100%) rename sklearn/datasets/tests/mock_openml/40966/{MiceProtein_4_active.json => miceprotein_4_active.json} (100%) rename sklearn/datasets/tests/mock_openml/40966/{MiceProtein_None_active.json => miceprotein_None_active.json} (100%) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index c08f3edb4645b..619b1d35007ab 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -5,11 +5,11 @@ from warnings import warn try: - # Python 2 - from urllib2 import urlopen -except ImportError: # Python 3+ from urllib.request import urlopen +except ImportError: + # Python 2 + from urllib2 import urlopen import numpy as np @@ -202,7 +202,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, Parameters ---------- - name : str + name : str or None String identifier of the dataset. Note that OpenML can have multiple datasets with the same name. @@ -210,7 +210,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, Version of the dataset. Can only be provided if also ``name`` is given. If 'active' the oldest version that's still active is used. - data_id : int + data_id : int or None OpenML ID of the dataset. The most specific way of retrieving a dataset. If data_id is not given, name (and potential version) are used to obtain a dataset. @@ -245,10 +245,10 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, else: def mem(func): return func - _get_data_info_by_name_ = mem(_get_data_info_by_name) - _get_data_description_by_id_ = mem(_get_data_description_by_id) - _get_data_features_ = mem(_get_data_features) - _download_data_ = mem(_download_data_arff) + cached_get_data_info_by_name = mem(_get_data_info_by_name) + cached_get_data_description_by_id = mem(_get_data_description_by_id) + cached_get_data_features = mem(_get_data_features) + cached_download_data_arff = mem(_download_data_arff) if not exists(data_home): os.makedirs(data_home) @@ -256,13 +256,15 @@ def mem(func): # check legal function arguments. data_id XOR (name, version) should be # provided if name is not None: + # OpenML is case-insensitive, but the caching mechanism is not + # convert all data names (str) to lower case name = name.lower() if data_id is not None: raise ValueError( "Dataset data_id={} and name={} passed, but you can only " "specify a numeric data_id or a name, not " "both.".format(data_id, name)) - data_info = _get_data_info_by_name_(name, version) + data_info = cached_get_data_info_by_name(name, version) data_id = data_info['did'] elif data_id is not None: # from the previous if statement, it is given that name is None @@ -276,7 +278,7 @@ def mem(func): "Neither name nor data_id are provided. Please provide name or " "data_id.") - data_description = _get_data_description_by_id_(data_id) + data_description = cached_get_data_description_by_id(data_id) if data_description['status'] != "active": warn("Version {} of dataset {} is inactive, meaning that issues have" " been found in the dataset. Try using a newer version.".format( @@ -286,7 +288,7 @@ def mem(func): None) # download actual data - features = _get_data_features_(data_id) + features = cached_get_data_features(data_id) name_feature = {feature['name']: feature for feature in features} # TODO: stacking the content of the structured array @@ -298,7 +300,7 @@ def mem(func): 'false' and feature['is_row_identifier'] == 'false'): data_columns.append(feature['name']) - arff_data = _download_data_(data_description['file_id'])['data'] + arff_data = cached_download_data_arff(data_description['file_id'])['data'] data = _convert_arff_data(arff_data) data = _convert_numericals(data, name_feature) diff --git a/sklearn/datasets/tests/mock_openml/292/Australian_1_active.json b/sklearn/datasets/tests/mock_openml/292/australian_1_active.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/292/Australian_1_active.json rename to sklearn/datasets/tests/mock_openml/292/australian_1_active.json diff --git a/sklearn/datasets/tests/mock_openml/292/Australian_1_deactivated.json b/sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/292/Australian_1_deactivated.json rename to sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json diff --git a/sklearn/datasets/tests/mock_openml/292/Australian_None_active.json b/sklearn/datasets/tests/mock_openml/292/australian_None_active.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/292/Australian_None_active.json rename to sklearn/datasets/tests/mock_openml/292/australian_None_active.json diff --git a/sklearn/datasets/tests/mock_openml/40966/MiceProtein_4_active.json b/sklearn/datasets/tests/mock_openml/40966/miceprotein_4_active.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/40966/MiceProtein_4_active.json rename to sklearn/datasets/tests/mock_openml/40966/miceprotein_4_active.json diff --git a/sklearn/datasets/tests/mock_openml/40966/MiceProtein_None_active.json b/sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json similarity index 100% rename from sklearn/datasets/tests/mock_openml/40966/MiceProtein_None_active.json rename to sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 13369cb1e96a0..a98a38aa10ce0 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -14,11 +14,11 @@ try: - # Python 2 - from urllib2 import urlopen -except ImportError: # Python 3+ from urllib.request import urlopen +except ImportError: + # Python 2 + from urllib2 import urlopen def fetch_dataset_from_openml(data_id, data_name, data_version, From b5cce8c31745a04212d56d6c822349e76802ef84 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 18:02:54 -0400 Subject: [PATCH 070/138] added support for multi-target classification --- sklearn/datasets/openml.py | 62 +++++++++++++--- sklearn/datasets/tests/test_openml.py | 102 +++++++++++++++++++++++--- 2 files changed, 143 insertions(+), 21 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 619b1d35007ab..117652aef50c8 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -190,6 +190,34 @@ def _convert_numericals(data, name_feature): return data +def _determine_single_target_data_type(name_feature, target_column_name): + if not isinstance(target_column_name, str): + raise ValueError('target_column_name should be str, ' + 'got: %s' % type(target_column_name)) + + if name_feature[target_column_name]['data_type'] == "numeric": + return np.float64 + else: + return object + + +def _determine_multi_target_data_type(name_feature, target_column_names): + if not isinstance(target_column_names, list): + raise ValueError('target_column_name should be list, ' + 'got: %s' % type(target_column_names)) + found_types = set() + for target_column_name in target_column_names: + if name_feature[target_column_name]['data_type'] == "numeric": + found_types.add(np.float64) + else: + found_types.add(object) + if len(found_types) != 1: + raise ValueError('Can only handle homogeneous multi-target datasets, ' + 'i.e., all targets are either numeric or ' + 'categorical.') + return list(found_types)[0] + + def fetch_openml(name=None, version='active', data_id=None, data_home=None, target_column_name='default-target', cache=True): """Fetch dataset from openml by name or dataset id. @@ -219,11 +247,13 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, Specify another download and cache folder for the data sets. By default all scikit-learn data is stored in '~/scikit_learn_data' subfolders. - target_column_name : string or None, default 'default-target' + target_column_name : string, list or None, default 'default-target' Specify the column name in the data to use as target. If 'default-target', the standard target column a stored on the server is used. If ``None``, all columns are returned as data and the - target is ``None``. + target is ``None``. If list (of strings), all columns with these names + are returned as multi-target (Note: not all scikit-learn classifiers + can handle all types of multi-output combinations) cache : boolean, default=True Whether to cache downloaded datasets using joblib. @@ -296,22 +326,36 @@ def mem(func): # and target at start or end, we could use a view instead. data_columns = [] for feature in features: - if (feature['name'] != target_column_name and feature['is_ignore'] == - 'false' and feature['is_row_identifier'] == 'false'): + # determine whether `feature` is a target + if (isinstance(target_column_name, str) and + feature['name'] == target_column_name): + is_target = True + elif (isinstance(target_column_name, list) and + feature['name'] in target_column_name): + is_target = True + else: + is_target = False + + if ((not is_target) and feature['is_ignore'] == 'false' and + feature['is_row_identifier'] == 'false'): data_columns.append(feature['name']) arff_data = cached_download_data_arff(data_description['file_id'])['data'] data = _convert_arff_data(arff_data) data = _convert_numericals(data, name_feature) - if target_column_name is not None: + if isinstance(target_column_name, str): # determine vector type - if name_feature[target_column_name]['data_type'] == "numeric": - dtype = np.float64 - else: - dtype = object + dtype = _determine_single_target_data_type(name_feature, + target_column_name) y = np.array(data[:, int(name_feature[target_column_name]['index'])], dtype=dtype) + elif isinstance(target_column_name, list): + dtype = _determine_multi_target_data_type(name_feature, + target_column_name) + indices = [int(name_feature[col_name]['index']) + for col_name in target_column_name] + y = np.array(data[:, indices], dtype=dtype) else: y = None diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index a98a38aa10ce0..e41b49cc6fc09 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -22,9 +22,10 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, + target_column_name, expected_observations, expected_features, exptected_data_dtype, exptected_target_dtype, - expect_sparse): + expect_sparse, compare_default_target): data_by_name_id = fetch_openml(name=data_name, version=data_version, cache=False) assert int(data_by_name_id.details['id']) == data_id @@ -34,12 +35,34 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, # will be the same # fetch with dataset id - data_by_id = fetch_openml(data_id=data_id, cache=False) + data_by_id = fetch_openml(data_id=data_id, cache=False, + target_column_name=target_column_name) assert data_by_id.details['name'] == data_name assert data_by_id.data.shape == (expected_observations, expected_features) - assert data_by_id.target.shape == (expected_observations, ) + if isinstance(target_column_name, str): + # single target, so target is vector + assert data_by_id.target.shape == (expected_observations, ) + elif isinstance(target_column_name, list): + # multi target, so target is array + assert data_by_id.target.shape == (expected_observations, + len(target_column_name)) assert data_by_id.data.dtype == exptected_data_dtype assert data_by_id.target.dtype == exptected_target_dtype + + if compare_default_target: + # check whether the data by id and data by id target are equal + data_by_id_default = fetch_openml(data_id=data_id, cache=False) + if data_by_id.data.dtype == np.float64: + np.testing.assert_almost_equal(data_by_id.data, + data_by_id_default.data) + else: + assert np.array_equal(data_by_id.data, data_by_id_default.data) + if data_by_id.target.dtype == np.float64: + np.testing.assert_almost_equal(data_by_id.target, + data_by_id_default.target) + else: + assert np.array_equal(data_by_id.target, data_by_id_default.target) + if expect_sparse: assert isinstance(data_by_id.data, scipy.sparse.csr_matrix) else: @@ -138,13 +161,31 @@ def test_fetch_openml_iris(monkeypatch): data_id = 61 data_name = 'iris' data_version = 1 + target_column = 'class' expected_observations = 150 expected_features = 4 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, + fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, - np.float64, object, expect_sparse=False) + np.float64, object, expect_sparse=False, + compare_default_target=True) + + +def test_fetch_openml_iris_multitarget(monkeypatch): + # classification dataset with numeric only columns + data_id = 61 + data_name = 'iris' + data_version = 1 + target_column = ['sepallength', 'sepalwidth'] + expected_observations = 150 + expected_features = 3 + + _monkey_patch_webbased_functions(monkeypatch, data_id) + fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + object, np.float64, expect_sparse=False, + compare_default_target=False) def test_fetch_openml_anneal(monkeypatch): @@ -152,13 +193,31 @@ def test_fetch_openml_anneal(monkeypatch): data_id = 2 data_name = 'anneal' data_version = 1 + target_column = 'class' # Not all original instances included for space reasons expected_observations = 11 expected_features = 38 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, + fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + object, object, expect_sparse=False, + compare_default_target=True) + + +def test_fetch_openml_anneal_multitarget(monkeypatch): + # classification dataset with numeric and categorical columns + data_id = 2 + data_name = 'anneal' + data_version = 1 + target_column = ['class', 'product-type', 'shape'] + # Not all original instances included for space reasons + expected_observations = 11 + expected_features = 36 + _monkey_patch_webbased_functions(monkeypatch, data_id) + fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, - object, object, expect_sparse=False) + object, object, expect_sparse=False, + compare_default_target=False) def test_fetch_openml_cpu(monkeypatch): @@ -166,12 +225,14 @@ def test_fetch_openml_cpu(monkeypatch): data_id = 561 data_name = 'cpu' data_version = 1 + target_column = 'class' expected_observations = 209 expected_features = 7 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, + fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, - object, np.float64, expect_sparse=False) + object, np.float64, expect_sparse=False, + compare_default_target=True) def test_fetch_openml_australian(monkeypatch): @@ -182,6 +243,7 @@ def test_fetch_openml_australian(monkeypatch): data_id = 292 data_name = 'Australian' data_version = 1 + target_column = 'Y' # Not all original instances included for space reasons expected_observations = 85 expected_features = 14 @@ -192,11 +254,13 @@ def test_fetch_openml_australian(monkeypatch): fetch_dataset_from_openml, **{'data_id': data_id, 'data_name': data_name, 'data_version': data_version, + 'target_column_name': target_column, 'expected_observations': expected_observations, 'expected_features': expected_features, 'expect_sparse': False, 'exptected_data_dtype': np.float64, - 'exptected_target_dtype': object} + 'exptected_target_dtype': object, + 'compare_default_target': True} ) @@ -208,13 +272,15 @@ def test_fetch_openml_miceprotein(monkeypatch): data_id = 40966 data_name = 'MiceProtein' data_version = 4 + target_column = 'class' # Not all original instances included for space reasons expected_observations = 7 expected_features = 77 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, + fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, - np.float64, object, expect_sparse=False) + np.float64, object, expect_sparse=False, + compare_default_target=True) def test_fetch_openml_inactive(monkeypatch): @@ -241,6 +307,18 @@ def test_fetch_nonexiting(monkeypatch): fetch_openml, name='glass2', cache=False) +def test_raises_illegal_multitarget(monkeypatch): + data_id = 61 + targets = ['sepalwidth', 'class'] + _monkey_patch_webbased_functions(monkeypatch, data_id) + # Note that we only want to search by name (not data id) + assert_raise_message(ValueError, + "Can only handle homogeneous multi-target datasets,", + fetch_openml, data_id=data_id, + target_column_name=targets, cache=False) + + + def test_fetch_openml_raises_illegal_argument(): assert_raise_message(ValueError, "Dataset data_id=", fetch_openml, data_id=-1, name="name") From 02108c49e193602f1693908546f26dd4dbaa0647 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 18:09:02 -0400 Subject: [PATCH 071/138] fix visual indent error --- sklearn/datasets/tests/test_openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index e41b49cc6fc09..bfaf254b240af 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -36,7 +36,7 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, # fetch with dataset id data_by_id = fetch_openml(data_id=data_id, cache=False, - target_column_name=target_column_name) + target_column_name=target_column_name) assert data_by_id.details['name'] == data_name assert data_by_id.data.shape == (expected_observations, expected_features) if isinstance(target_column_name, str): From a01e8ba10f5f864f452a83087d12391bd35cf0ad Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 17 Jul 2018 19:04:11 -0400 Subject: [PATCH 072/138] gzipped test data --- sklearn/datasets/openml.py | 11 +- .../tests/mock_openml/2/anneal_1_active.json | 43 -- .../mock_openml/2/anneal_1_active.json.gz | Bin 0 -> 312 bytes .../mock_openml/2/anneal_None_active.json | 43 -- .../mock_openml/2/anneal_None_active.json.gz | Bin 0 -> 315 bytes .../datasets/tests/mock_openml/2/data.arff | 172 ----- .../datasets/tests/mock_openml/2/data.arff.gz | Bin 0 -> 1841 bytes .../tests/mock_openml/2/data_description.json | 19 - .../mock_openml/2/data_description.json.gz | Bin 0 -> 1362 bytes .../tests/mock_openml/2/data_features.json | 317 --------- .../tests/mock_openml/2/data_features.json.gz | Bin 0 -> 666 bytes .../mock_openml/292/australian_1_active.json | 6 - .../292/australian_1_active.json.gz | Bin 0 -> 99 bytes .../292/australian_1_deactivated.json | 43 -- .../292/australian_1_deactivated.json.gz | Bin 0 -> 325 bytes .../292/australian_None_active.json | 41 -- .../292/australian_None_active.json.gz | Bin 0 -> 376 bytes .../datasets/tests/mock_openml/292/data.arff | 115 --- .../tests/mock_openml/292/data.arff.gz | Bin 0 -> 2532 bytes .../mock_openml/292/data_description.json | 20 - .../mock_openml/292/data_description.json.gz | Bin 0 -> 547 bytes .../tests/mock_openml/292/data_features.json | 125 ---- .../mock_openml/292/data_features.json.gz | Bin 0 -> 286 bytes .../tests/mock_openml/40675/data.arff | 180 ----- .../tests/mock_openml/40675/data.arff.gz | Bin 0 -> 3000 bytes .../mock_openml/40675/data_description.json | 17 - .../40675/data_description.json.gz | Bin 0 -> 323 bytes .../mock_openml/40675/data_features.json | 85 --- .../mock_openml/40675/data_features.json.gz | Bin 0 -> 288 bytes .../mock_openml/40675/glass2_1_active.json | 1 - .../mock_openml/40675/glass2_1_active.json.gz | Bin 0 -> 85 bytes .../40675/glass2_1_deactivated.json | 40 -- .../40675/glass2_1_deactivated.json.gz | Bin 0 -> 296 bytes .../mock_openml/40675/glass2_None_active.json | 1 - .../40675/glass2_None_active.json.gz | Bin 0 -> 88 bytes .../tests/mock_openml/40966/data.arff | 92 --- .../tests/mock_openml/40966/data.arff.gz | Bin 0 -> 6471 bytes .../mock_openml/40966/data_description.json | 20 - .../40966/data_description.json.gz | Bin 0 -> 1659 bytes .../mock_openml/40966/data_features.json | 661 ------------------ .../mock_openml/40966/data_features.json.gz | Bin 0 -> 920 bytes .../40966/miceprotein_4_active.json | 40 -- .../40966/miceprotein_4_active.json.gz | Bin 0 -> 308 bytes .../40966/miceprotein_None_active.json | 40 -- .../40966/miceprotein_None_active.json.gz | Bin 0 -> 311 bytes .../tests/mock_openml/561/cpu_1_active.json | 43 -- .../mock_openml/561/cpu_1_active.json.gz | Bin 0 -> 299 bytes .../mock_openml/561/cpu_None_active.json | 81 --- .../mock_openml/561/cpu_None_active.json.gz | Bin 0 -> 348 bytes .../datasets/tests/mock_openml/561/data.arff | 303 -------- .../tests/mock_openml/561/data.arff.gz | Bin 0 -> 3303 bytes .../mock_openml/561/data_description.json | 17 - .../mock_openml/561/data_description.json.gz | Bin 0 -> 1798 bytes .../tests/mock_openml/561/data_features.json | 69 -- .../mock_openml/561/data_features.json.gz | Bin 0 -> 262 bytes .../datasets/tests/mock_openml/61/data.arff | 222 ------ .../tests/mock_openml/61/data.arff.gz | Bin 0 -> 2342 bytes .../mock_openml/61/data_description.json | 1 - .../mock_openml/61/data_description.json.gz | Bin 0 -> 898 bytes .../tests/mock_openml/61/data_features.json | 1 - .../mock_openml/61/data_features.json.gz | Bin 0 -> 210 bytes .../tests/mock_openml/61/iris_1_active.json | 43 -- .../mock_openml/61/iris_1_active.json.gz | Bin 0 -> 291 bytes .../mock_openml/61/iris_None_active.json | 81 --- .../mock_openml/61/iris_None_active.json.gz | Bin 0 -> 333 bytes sklearn/datasets/tests/test_openml.py | 23 +- 66 files changed, 15 insertions(+), 3001 deletions(-) delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1_active.json create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/2/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/2/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/2/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/australian_1_active.json create mode 100644 sklearn/datasets/tests/mock_openml/292/australian_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json create mode 100644 sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/australian_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/292/australian_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/292/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/292/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/292/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/40675/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_1_active.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/40966/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/40966/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/40966/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/miceprotein_4_active.json create mode 100644 sklearn/datasets/tests/mock_openml/40966/miceprotein_4_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/cpu_1_active.json create mode 100644 sklearn/datasets/tests/mock_openml/561/cpu_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/cpu_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/561/cpu_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/561/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/561/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/561/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/61/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/61/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/61/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/iris_1_active.json create mode 100644 sklearn/datasets/tests/mock_openml/61/iris_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/iris_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/61/iris_None_active.json.gz diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 117652aef50c8..ff9c04c1945ef 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -106,7 +106,7 @@ def _get_data_info_by_name(name, version): """ Utilizes the openml dataset listing api to find a dataset by name/version - OpenML api fn: + OpenML api function: https://www.openml.org/api_docs#!/data/get_data_list_data_name_data_name Parameters @@ -138,7 +138,7 @@ def _get_data_info_by_name(name, version): url = (_SEARCH_NAME + "/data_version/{}").format(name, version) json_data = _get_json_content_from_openml_api(url, None, False) if json_data is None: - # we can do this in 1 fn call if OpenML does not require the + # we can do this in 1 function call if OpenML does not require the # specification of the dataset status (i.e., return datasets with a # given name / version regardless of active, deactivated, etc. ) # TODO: feature request OpenML. @@ -151,7 +151,7 @@ def _get_data_info_by_name(name, version): def _get_data_description_by_id(data_id): - # OpenML API fn: https://www.openml.org/api_docs#!/data/get_data_id + # OpenML API function: https://www.openml.org/api_docs#!/data/get_data_id url = _DATA_INFO.format(data_id) error_message = "Dataset with id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True) @@ -159,7 +159,8 @@ def _get_data_description_by_id(data_id): def _get_data_features(data_id): - # OpenML fn: https://www.openml.org/api_docs#!/data/get_data_features_id + # OpenML function: + # https://www.openml.org/api_docs#!/data/get_data_features_id url = _DATA_FEATURES.format(data_id) error_message = "Dataset with id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True) @@ -283,7 +284,7 @@ def mem(func): if not exists(data_home): os.makedirs(data_home) - # check legal function arguments. data_id XOR (name, version) should be + # check valid function arguments. data_id XOR (name, version) should be # provided if name is not None: # OpenML is case-insensitive, but the caching mechanism is not diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json deleted file mode 100644 index 1f8b45b70ebf3..0000000000000 --- a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "data": { - "dataset": [{ - "did": 2, - "name": "anneal", - "version": 1, - "status": "active", - "format": "ARFF", - "file_id": 1666876, - "quality": [{ - "name": "MajorityClassSize", - "value": "684.0" - }, { - "name": "MaxNominalAttDistinctValues", - "value": "7.0" - }, { - "name": "MinorityClassSize", - "value": "8.0" - }, { - "name": "NumberOfClasses", - "value": "5.0" - }, { - "name": "NumberOfFeatures", - "value": "39.0" - }, { - "name": "NumberOfInstances", - "value": "898.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "898.0" - }, { - "name": "NumberOfMissingValues", - "value": "22175.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "6.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "33.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..97ec87c488cc6f0760354de7d4ab19ce524af5cc GIT binary patch literal 312 zcmV-80muFyiwFqxu}fP317U7%WnpYzF<)V0bZK^FE^2dcZUBvuK~KU!5QWe5SCBmu zV_V%8Zv@lC1DHsn2V=}o796wP#@#6qN&masF5rQd_0rw#)mHHI=IWX?W<467rN8H8 zfePe==pGHB%IUdDnlnz)PeJ9GA??l1t70ki=6coZL21*H#%$ZxE4VKFKp)(8tRi>@W3Af@Y6oXJsO^+ zzvpFv3gm?79u1+&>A6XoGfvV^LFJht?aj`sVkz|Fy3KZUz4azDVb`lWqVd?9eNgu2 zsJtVbj{P&A(l1CKGc*R(re}Ho!CfXqQJDCbVNank@7)Ra5*E8+S;`BDI6gAo0{5wd N`WIgV4X!u?001tVl@tH~ literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff b/sklearn/datasets/tests/mock_openml/2/data.arff deleted file mode 100644 index 2f8010c3798cc..0000000000000 --- a/sklearn/datasets/tests/mock_openml/2/data.arff +++ /dev/null @@ -1,172 +0,0 @@ -% 1. Title of Database: Annealing Data -% -% 2. Source Information: donated by David Sterling and Wray Buntine. -% -% 3. Past Usage: unknown -% -% 4. Relevant Information: -% -- Explanation: I suspect this was left by Ross Quinlan in 1987 at the -% 4th Machine Learning Workshop. I'd have to check with Jeff Schlimmer -% to double check this. -% -% 5. Number of Instances: 798 -% -% 6. Number of Attributes: 38 -% -- 6 continuously-valued -% -- 3 integer-valued -% -- 29 nominal-valued -% -% 7. Attribute Information: -% 1. family: --,GB,GK,GS,TN,ZA,ZF,ZH,ZM,ZS -% 2. product-type: C, H, G -% 3. steel: -,R,A,U,K,M,S,W,V -% 4. carbon: continuous -% 5. hardness: continuous -% 6. temper_rolling: -,T -% 7. condition: -,S,A,X -% 8. formability: -,1,2,3,4,5 -% 9. strength: continuous -% 10. non-ageing: -,N -% 11. surface-finish: P,M,- -% 12. surface-quality: -,D,E,F,G -% 13. enamelability: -,1,2,3,4,5 -% 14. bc: Y,- -% 15. bf: Y,- -% 16. bt: Y,- -% 17. bw/me: B,M,- -% 18. bl: Y,- -% 19. m: Y,- -% 20. chrom: C,- -% 21. phos: P,- -% 22. cbond: Y,- -% 23. marvi: Y,- -% 24. exptl: Y,- -% 25. ferro: Y,- -% 26. corr: Y,- -% 27. blue/bright/varn/clean: B,R,V,C,- -% 28. lustre: Y,- -% 29. jurofm: Y,- -% 30. s: Y,- -% 31. p: Y,- -% 32. shape: COIL, SHEET -% 33. thick: continuous -% 34. width: continuous -% 35. len: continuous -% 36. oil: -,Y,N -% 37. bore: 0000,0500,0600,0760 -% 38. packing: -,1,2,3 -% classes: 1,2,3,4,5,U -% -% -- The '-' values are actually 'not_applicable' values rather than -% 'missing_values' (and so can be treated as legal discrete -% values rather than as showing the absence of a discrete value). -% -% 8. Missing Attribute Values: Signified with "?" -% Attribute: Number of instances missing its value: -% 1 0 -% 2 0 -% 3 70 -% 4 0 -% 5 0 -% 6 675 -% 7 271 -% 8 283 -% 9 0 -% 10 703 -% 11 790 -% 12 217 -% 13 785 -% 14 797 -% 15 680 -% 16 736 -% 17 609 -% 18 662 -% 19 798 -% 20 775 -% 21 791 -% 22 730 -% 23 798 -% 24 796 -% 25 772 -% 26 798 -% 27 793 -% 28 753 -% 29 798 -% 30 798 -% 31 798 -% 32 0 -% 33 0 -% 34 0 -% 35 0 -% 36 740 -% 37 0 -% 38 789 -% 39 0 -% -% 9. Distribution of Classes -% Class Name: Number of Instances: -% 1 8 -% 2 88 -% 3 608 -% 4 0 -% 5 60 -% U 34 -% --- -% 798 -% -@relation anneal.ORIG -@attribute 'family' { GB , GK , GS , TN , ZA , ZF , ZH , ZM , ZS } -@attribute 'product-type' { C , H , G } -@attribute 'steel' { R , A , U , K , M , S , W , V } -@attribute 'carbon' real -@attribute 'hardness' real -@attribute 'temper_rolling' { T } -@attribute 'condition' { S , A , X } -@attribute 'formability' { 1 , 2 , 3 , 4 , 5 } -@attribute 'strength' real -@attribute 'non-ageing' { N } -@attribute 'surface-finish' { P , M } -@attribute 'surface-quality' { D , E , F , G } -@attribute 'enamelability' { 1 , 2 , 3 , 4 , 5 } -@attribute 'bc' { Y } -@attribute 'bf' { Y } -@attribute 'bt' { Y } -@attribute 'bw%2Fme' { B , M } -@attribute 'bl' { Y } -@attribute 'm' { Y } -@attribute 'chrom' { C } -@attribute 'phos' { P } -@attribute 'cbond' { Y } -@attribute 'marvi' { Y } -@attribute 'exptl' { Y } -@attribute 'ferro' { Y } -@attribute 'corr' { Y } -@attribute 'blue%2Fbright%2Fvarn%2Fclean' { B , R , V , C } -@attribute 'lustre' { Y } -@attribute 'jurofm' { Y } -@attribute 's' { Y } -@attribute 'p' { Y } -@attribute 'shape' { COIL , SHEET } -@attribute 'thick' real -@attribute 'width' real -@attribute 'len' real -@attribute 'oil' { Y , N } -@attribute 'bore' { 0 , 500 , 600 , 760 } -@attribute 'packing' { 1 , 2 , 3 } -@attribute 'class' { 1 , 2 , 3 , 4 , 5 , U } -@data -% -% instances from file: anneal-train.arff -% -?,C,A,8,0,?,S,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,385.1,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,255,269,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.3,152,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,1320,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,610,0,?,0,?,3 -% JvR: Rest of dataset truncated for space reasons. diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff.gz b/sklearn/datasets/tests/mock_openml/2/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..79c426cb9540b7f9af119d67d9a0487166026a4d GIT binary patch literal 1841 zcmV-12hR8(iwFp9hD}=l17u-zVJ=~EW@Z4bSle>jI1+u&S9DEPO1o7c!;3^pdhz%k zPsX0CWG7?4q(BO^xTZ)g0ovo*+JE21MHETFlS%C|CS-RXG`bHO=vLl?@4{^^3I&7lDSizoYDSE4*3LnRT^FOu) zEzQzbz#G10sQ|IgIlNE~14QvC<_I z@x+CjW|Od5l6+NiLCci!ImEN621H%Ju@H5hG(sZ6X&ZS2X(efFs)iS@&ND3{9|C30xWkZa)`{6&=IikOes=cjObfCQI^_d@)!| zhm_Wd-0Sw)vtU5T?wZ!Cl5swN6NC&4w%M}!TU`}0JLhuMTcbrbaKq z5L4tsa+KsnE(|FS@ku~JGA0v)n#tH|Rz8aLo38kti#t*}nEcueZR*Bok$B$J8BLj! z#Lq0dN*WAwpZ|F4E>XB=`y&dCKa6#GaqE9r(69d{3$^^x2p?d}3T_w72!YLdOF zMLHAlrWWZ;UOsGC7jV*v0m)2?H)kV>n}Kq#4UoNbT~|HCX{$x{w(E-brhjg=$X$xb zwCbw&mXWm$t)Fwd7TIEdY(-($B3l`&>&mW;WO~(g&#S#wvV{lpLsI9DYw_V3FQN}= z!Du(>Pw;?zA^SLy!J?6=Hn&+s2LIXARkpEdLu8P@$!{nbd|NBCZ%wzoojv{S>Q@5G zkLTy+IEBb0-hSy*7d1QvArktMuQ~_C20~s7R`&fl03p3qKFBAB-0zN5C<(55Q~`MS z5N{%fNDgu288lM6rRkG8o957HO`7 zTEHsjY0bpGz#STwV61L0veKatXu=uRB3X85J73THyD47C$F+8(Q!&0M%X3)fk7b_a z=!GhcKOOy~7jKcs*1odkyV3_HG{^yc&ne~ zT%RlKQ{;g<)mPH)z^gyuhU&^|YdLqwZt(J%?i9g5-YUYLJn~w_xIbfe()!0wP1z~# z`igMeURb@yaU8qCw9P-)*x)E8sQR|z{Cv)zm7)0=3fg9lml!X;&`#72hv|S-QO) z0p8_BPqAxhEvkMatCqYSn%#A?O1m@;{XRf-I$DME5fk7W;ycE7auA~KZ7n|SJ6dJw zW;nCg(kjSj#f%+hI$MQ1L)AYp5Dbkxi_93E99}HL7{FYEkm^t^nXH;piyZq(jG^V0t|1ZQR+9Y@F{#KfG}^KZpKCvzf9xo=!cS(0BNM%88Kp zli>fGXxd#r42C@HoelBx<}cXo^WbZv!%X{ecL#emJQwfbm*>SC7K{to?8!TTGl5?Z fn=(~j5V6by#~X&p>x)+A& literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/2/data_description.json b/sklearn/datasets/tests/mock_openml/2/data_description.json deleted file mode 100644 index dabc7f5718435..0000000000000 --- a/sklearn/datasets/tests/mock_openml/2/data_description.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "data_set_description": { - "id": "2", - "name": "anneal", - "version": "1", - "description": "**Author**: Unknown. Donated by David Sterling and Wray Buntine \n**Source**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/datasets\/Annealing) - 1990 \n**Please cite**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/citation_policy.html) \n\nThe original Annealing dataset from UCI. The exact meaning of the features and classes is largely unknown. Annealing, in metallurgy and materials science, is a heat treatment that alters the physical and sometimes chemical properties of a material to increase its ductility and reduce its hardness, making it more workable. It involves heating a material to above its recrystallization temperature, maintaining a suitable temperature, and then cooling. (Wikipedia)\n\n### Attribute Information:\n 1. family: --,GB,GK,GS,TN,ZA,ZF,ZH,ZM,ZS\n 2. product-type: C, H, G\n 3. steel: -,R,A,U,K,M,S,W,V\n 4. carbon: continuous\n 5. hardness: continuous\n 6. temper_rolling: -,T\n 7. condition: -,S,A,X\n 8. formability: -,1,2,3,4,5\n 9. strength: continuous\n 10. non-ageing: -,N\n 11. surface-finish: P,M,-\n 12. surface-quality: -,D,E,F,G\n 13. enamelability: -,1,2,3,4,5\n 14. bc: Y,-\n 15. bf: Y,-\n 16. bt: Y,-\n 17. bw\/me: B,M,-\n 18. bl: Y,-\n 19. m: Y,-\n 20. chrom: C,-\n 21. phos: P,-\n 22. cbond: Y,-\n 23. marvi: Y,-\n 24. exptl: Y,-\n 25. ferro: Y,-\n 26. corr: Y,-\n 27. blue\/bright\/varn\/clean: B,R,V,C,-\n 28. lustre: Y,-\n 29. jurofm: Y,-\n 30. s: Y,-\n 31. p: Y,-\n 32. shape: COIL, SHEET\n 33. thick: continuous\n 34. width: continuous\n 35. len: continuous\n 36. oil: -,Y,N\n 37. bore: 0000,0500,0600,0760\n 38. packing: -,1,2,3\n classes: 1,2,3,4,5,U\n \n -- The '-' values are actually 'not_applicable' values rather than\n 'missing_values' (and so can be treated as legal discrete\n values rather than as showing the absence of a discrete value).", - "format": "ARFF", - "upload_date": "2014-04-06T23:19:24", - "licence": "Public", - "url": "https:\/\/www.openml.org\/data\/v1\/download\/1666876\/anneal.arff", - "file_id": "1666876", - "default_target_attribute": "class", - "version_label": "1", - "tag": ["study_1", "study_14", "study_34", "study_37", "study_41", "study_70", "study_76", "uci"], - "visibility": "public", - "status": "active", - "md5_checksum": "4eaed8b6ec9d8211024b6c089b064761" - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/data_description.json.gz b/sklearn/datasets/tests/mock_openml/2/data_description.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..035906031542d87495281a16a02155bdbafeb6cd GIT binary patch literal 1362 zcmV-Y1+DrYiwFoYfJ$2c17u-zVP9lrb7OL8aCB*JZZ2wbZ*BmUR$X)2I23(Oe#IU7 zkR~G=48%!zOVZ|Jy6t94(r!~aj4TVRjVyU38OnD0-}lOPz_j6EJ>ZdbkIub1`ndPU z{$3}gj!rFi)0A6gMB#*1oe})l-`nem6kDBshxiXgbM8N>Qk=@VZ^4bN@tvsd*=Fe+ z9i5jh)8^=C1P|&->7@$cjaJn06p|IZp$n11*l{C;ngdlSd^U6i7o~DSae#?BIvVTJ zFzzY7K3v{@d!0E~*wLgr=~BZovEZR#HY}M4d0I}oxtw(UtZ-6x(mk)jMe;)kAUZqi z)tq;dBLJ9i|Bo04P(Qh8p`~D}Fmt&)^pq2IpK;Je%!Q&7)^4E*1!hL)fNnzYK>nRF z2RWz8WAqFhcFs6;rQx>Hfk|pDwuJ>r&78{>l+OyT*$D`RERIT9n)#|4n4`ExP-($3 z!4>1gb5O{T9h|{;&K0&Y{G<}GwsKx%D=Qd=?m4VRQjw#3mhrsmE{ra?aRU1=T)K7x zPGbCA|iba3%>A_{TjBl|Y=q(_ti1~Od|CTJRg>9H zE6SO;omP}HS>nCI+lY(SBv8#n?i`LP=D!#>);`L|GQ4xzh|9GVWFQPr3=-vYDH77t|=c zlJP2UZ~O~9B%jD;swko?{dOC@M2aH*T^c>hU$PERM7vYsffsSN)$hQJ7F&yZ`RDB) z1jaXS-!?~TfMU8#u%|Za*P}2%O_w5V9hR3sD6QmbJD%S_sIV5lY^i{Jc|KMHud&{e z3ZRD%=^gu5>|ZBwuR)`<1!Ygw`D_kOZE2F%nr3~b$b$#epdhGH;X!Z!3yKSiNeYtz z=0!ZOnC%Xfc2imum}mXXy$0dsopIyymujvPfP-9Ei(yP_%mKWvvlw2B3KCwYJuEpW zCR0AgOp*$$Q@G=6hTq9O*k*d^6NpccG_gLL*4giQd_C?ktgD|oJ@~@s{NvSC-B%V; z({zeuKvh2Vd(klH;V-`L4@S}1s6VW6I89IQF?VHxU(IkMeb=TmSuU3$W@44gP@8#O z>flj`u!XgO_ciH8aU7qX#8}5vg+fTpY}Q05B%juGT?2Zq+h(+sZt8rgfwDj6JP)iE zbF1K+;*H5=tL$@hj$dCp)|KgMik9B$f!cKc-09=7l&y;eK+Z7jb!-)iT=iu$7V zo{N@9SOvJ!R@Eui9t&Rg=IQYi%NO=!%iPkpHd^-j-{UOYUB Uqt5=`&;6hO0e4b}%oPg&0Fzdr?EnA( literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/2/data_features.json b/sklearn/datasets/tests/mock_openml/2/data_features.json deleted file mode 100644 index b859302867253..0000000000000 --- a/sklearn/datasets/tests/mock_openml/2/data_features.json +++ /dev/null @@ -1,317 +0,0 @@ -{ - "data_features": { - "feature": [{ - "index": "0", - "name": "family", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "772" - }, { - "index": "1", - "name": "product-type", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "2", - "name": "steel", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "86" - }, { - "index": "3", - "name": "carbon", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "4", - "name": "hardness", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "5", - "name": "temper_rolling", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "761" - }, { - "index": "6", - "name": "condition", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "303" - }, { - "index": "7", - "name": "formability", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "318" - }, { - "index": "8", - "name": "strength", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "9", - "name": "non-ageing", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "793" - }, { - "index": "10", - "name": "surface-finish", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "889" - }, { - "index": "11", - "name": "surface-quality", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "244" - }, { - "index": "12", - "name": "enamelability", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "882" - }, { - "index": "13", - "name": "bc", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "897" - }, { - "index": "14", - "name": "bf", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "769" - }, { - "index": "15", - "name": "bt", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "824" - }, { - "index": "16", - "name": "bw%2Fme", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "687" - }, { - "index": "17", - "name": "bl", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "749" - }, { - "index": "18", - "name": "m", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "19", - "name": "chrom", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "872" - }, { - "index": "20", - "name": "phos", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "891" - }, { - "index": "21", - "name": "cbond", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "824" - }, { - "index": "22", - "name": "marvi", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "23", - "name": "exptl", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "896" - }, { - "index": "24", - "name": "ferro", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "868" - }, { - "index": "25", - "name": "corr", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "26", - "name": "blue%2Fbright%2Fvarn%2Fclean", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "892" - }, { - "index": "27", - "name": "lustre", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "847" - }, { - "index": "28", - "name": "jurofm", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "29", - "name": "s", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "30", - "name": "p", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "31", - "name": "shape", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "32", - "name": "thick", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "33", - "name": "width", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "34", - "name": "len", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "35", - "name": "oil", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "834" - }, { - "index": "36", - "name": "bore", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "37", - "name": "packing", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "889" - }, { - "index": "38", - "name": "class", - "data_type": "nominal", - "is_target": "true", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/data_features.json.gz b/sklearn/datasets/tests/mock_openml/2/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..de2b76ba6c5e27466fd7ab3e610f85388b798cc9 GIT binary patch literal 666 zcmV;L0%iRliwFo7$~E|aGmkN887W^%8XT% z(CPSRksbBF3DfxidSL>>sWOfB(X>Vbe!x$z)=-7Ea%LQj@2aD;)76M1&(man==}VI z^zV`W0YWpW_;OXv&5GT!4Joo=j9OcE;)`rqy+G=fggW>|`IFON6sx^IAoab3#_Mrh zi~g@jf7EW6Ujf0|c|AKP%Cr5l9U1nb;2RSS;Yg1(LF~k`2{{g>0i3LjHIZLD75ie@ zh~h35f%aYO*K!_8q~8bsB0J6UER=*J?J< z^t^&ftg|$4}Dm!4j#MxL|&a@ z1gp6?YxwD>B2S9J>m(cvKmC;Zrx>{UeTe)*Pf-%peTtdeYJk8`e@5*;#;ytg{N$7F za|hme$&B6_OxMTx;wZt-Kgw#!uT(BdDyU)_+v!qh@-yH-q!TG7^6LblWr#J>u`rf7 zGL6tK?vT79?RO<{FW1wl7MRAdH|lLsJ;UCRz$`wQW<8xPfk|xjYP#$KQ#crgIglW7 zP;m$0z>rnc)??HTQoV6(hmu`Hfmy4pBtFp4`XfyLWBY$@H|Op7H;jwdjEEfo08i;r ArvLx| literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/292/australian_1_active.json b/sklearn/datasets/tests/mock_openml/292/australian_1_active.json deleted file mode 100644 index e37b4e03ed231..0000000000000 --- a/sklearn/datasets/tests/mock_openml/292/australian_1_active.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "error": { - "code": "372", - "message": "No results" - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/australian_1_active.json.gz b/sklearn/datasets/tests/mock_openml/292/australian_1_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..0e2c4395f1c234118fd039f2d0598f2ab41ea61b GIT binary patch literal 99 zcmV-p0G$6HiwFo_u}fP317US@baG*AX<=?(F<)V0bZK^FE^2dcZUC$1;#5j4D#|ZX zvQnt#;^b6H&QD1NvXzX@jg)ji0=cQh#fj-)F~59;qSWHjoRVTCF3wu6S^#i2H9kE6 F000vLD#!o; literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json b/sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json deleted file mode 100644 index 1fd7e551465a3..0000000000000 --- a/sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "data": { - "dataset": [{ - "did": 292, - "name": "Australian", - "version": 1, - "status": "deactivated", - "format": "Sparse_ARFF", - "file_id": 49822, - "quality": [{ - "name": "MajorityClassSize", - "value": "383.0" - }, { - "name": "MaxNominalAttDistinctValues", - "value": "2.0" - }, { - "name": "MinorityClassSize", - "value": "307.0" - }, { - "name": "NumberOfClasses", - "value": "2.0" - }, { - "name": "NumberOfFeatures", - "value": "15.0" - }, { - "name": "NumberOfInstances", - "value": "690.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "0.0" - }, { - "name": "NumberOfMissingValues", - "value": "0.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "14.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "1.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json.gz b/sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..5ee200d7c056b7e92c841a8d8c6404f4198a2c50 GIT binary patch literal 325 zcmV-L0lNMliwFo%m`hs#17US@baG*AX<=?(F<)e5VPkY@c42g7WG-rRZ*BmkkwH&` zKoEt`A)xGc0t{@gMZ#hFUou+&CR-@ z|CHO3v9zZ)N6_(UFMF-+kJ9N8_$>5)Pv0Xy&yfiAQ^)!G&Hl^Vw=|e`Ut`*9k!mcEgn7hsJ!YEM~ZwmL<0Z-S2~-{ literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/292/australian_None_active.json b/sklearn/datasets/tests/mock_openml/292/australian_None_active.json deleted file mode 100644 index 74c4cbf473e7f..0000000000000 --- a/sklearn/datasets/tests/mock_openml/292/australian_None_active.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "_comment": "JvR: I changed the did to 292 (although this version is inactive), in order to prevent multiple copies.", - "data": { - "dataset": [{ - "did": 292, - "name": "Australian", - "version": 4, - "status": "active", - "format": "ARFF", - "file_id": 18151910, - "quality": [{ - "name": "MajorityClassSize", - "value": "383.0" - }, { - "name": "MinorityClassSize", - "value": "307.0" - }, { - "name": "NumberOfClasses", - "value": "2.0" - }, { - "name": "NumberOfFeatures", - "value": "15.0" - }, { - "name": "NumberOfInstances", - "value": "690.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "0.0" - }, { - "name": "NumberOfMissingValues", - "value": "0.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "6.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "9.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/australian_None_active.json.gz b/sklearn/datasets/tests/mock_openml/292/australian_None_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..08d319727fb520503628d3c6307955884517a066 GIT binary patch literal 376 zcmV-;0f+t{iwFp@nM+#$17US@baG*AX<=?(PH%2yUtwc(X?A5UYIARH0Hu&!Yr-%T zhOh0f2)WvzNUPIX?_?l2a07+yVhoAx(VmeeE=dbc{O>z$b%UwvV7*Ar*YlpY*?EjU zzKC^}fpUDv_iml3Q>vJVFA}Z zg-n|SObKla6r{|uTsquHV6omH*f#gQ7Ego|v~%aR>exbQ;ib%}fC(kE)UQ${GAR9x za_fwcC={<72M^S{sSDN#m)ml-c669qX_JZS7e}-4_*g^CrxkAd z<>q_;RJ>_Jtve~Ko#V$ro_q+IR}e64)6eMADO!ta{ZtB^$~BAqm!}&H#us0s->5L(W=k!9 Wk%*2GuU>uZz5OR-F&Y7H0{{RFM6fFW literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/292/data.arff b/sklearn/datasets/tests/mock_openml/292/data.arff deleted file mode 100644 index b46a511c4d0eb..0000000000000 --- a/sklearn/datasets/tests/mock_openml/292/data.arff +++ /dev/null @@ -1,115 +0,0 @@ -% Dataset australian -% -% This data file was automatically converted from sparse data format. -% It was used in the large scale SVM experiments (http://www.largescalesvm.de) -% Original data has been normalized columnwise according to the following rules: -% If a column only contains one value (constant feature), it will set to zero and thus removed by sparsity. -% If a column contains two values (binary feature), the value occuring more often will be set to zero, the other to one. -% If a column contains more than two values (multinary/real feature), the column is divided by its std deviation. -% - -@RELATION australian - -@ATTRIBUTE Y {1, -1} -@ATTRIBUTE X1 numeric -@ATTRIBUTE X2 numeric -@ATTRIBUTE X3 numeric -@ATTRIBUTE X4 numeric -@ATTRIBUTE X5 numeric -@ATTRIBUTE X6 numeric -@ATTRIBUTE X7 numeric -@ATTRIBUTE X8 numeric -@ATTRIBUTE X9 numeric -@ATTRIBUTE X10 numeric -@ATTRIBUTE X11 numeric -@ATTRIBUTE X12 numeric -@ATTRIBUTE X13 numeric -@ATTRIBUTE X14 numeric - -@DATA -{0 -1, 1 1, 2 -0.7494737, 3 -0.1814286, 5 -0.5384615, 6 -0.25, 7 -0.8887719, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.97576} -{0 -1, 1 -1, 2 -0.7317293, 3 -0.5, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} -{0 -1, 1 -1, 2 -0.5239098, 3 -0.875, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9122807, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.72, 14 -1} -{0 1, 1 -1, 2 -0.7618045, 3 -0.1785714, 4 -1, 5 -0.3846154, 6 -0.5, 7 -1, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -1, 14 -1} -{0 1, 1 1, 2 -0.8069173, 3 -0.4164286, 5 -0.2307692, 6 -0.25, 7 -0.8624561, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -0.94, 14 -0.99684} -{0 1, 1 -1, 2 -0.9374436, 3 -0.9582143, 5 0.07692308, 6 0.75, 7 -0.8947368, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.9, 14 -1} -{0 -1, 1 1, 2 -0.8896241, 3 -0.5357143, 5 -0.6923077, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.94, 14 -0.998} -{0 1, 1 -1, 2 0.3509774, 3 -0.6814286, 5 0.5384615, 6 0.75, 7 -0.7866667, 8 1, 9 1, 10 -0.8208955, 11 -1, 13 -0.957, 14 -0.9888} -{0 -1, 1 1, 2 -0.5765414, 3 -0.9285714, 4 -1, 5 -0.8461538, 6 0.75, 7 -0.7894737, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.824, 14 -0.98926} -{0 -1, 1 -1, 2 0.2631579, 3 -0.4942857, 5 -0.5384615, 6 0.75, 7 -0.5263158, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.9, 14 -0.999} -{0 1, 1 1, 2 -0.406015, 3 -0.875, 5 1, 6 0.75, 7 -0.6842105, 8 1, 9 1, 10 -0.880597, 11 1, 13 -0.747, 14 -0.98286} -{0 1, 1 1, 2 -0.1678196, 3 -0.6428571, 5 0.5384615, 6 0.75, 7 -0.6491228, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.53, 14 -1} -{0 -1, 1 1, 2 -0.7918797, 3 -0.9107143, 4 -1, 5 0.07692308, 6 0.75, 7 -0.9035088, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.86, 14 -0.9958} -{0 1, 1 1, 2 -0.3633083, 3 -0.6428571, 5 1, 6 0.75, 7 -0.4736842, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -1, 14 -0.98} -{0 -1, 1 1, 2 0.3482707, 3 -0.8064286, 5 0.07692308, 6 -0.25, 7 -0.8305263, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.68, 14 -1} -{0 1, 1 1, 2 0.03248126, 3 -0.5685714, 5 -0.5384615, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.9462} -{0 1, 1 1, 2 -0.5239098, 3 -0.6785714, 5 0.2307692, 6 -0.25, 7 -0.4736842, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.67, 14 -1} -{0 1, 1 -1, 2 -0.8445113, 3 -0.3571429, 5 -0.2307692, 6 -0.25, 7 -0.9473684, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.912, 14 -0.98818} -{0 -1, 1 1, 2 -0.8120301, 3 -0.9107143, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -0.99992} -{0 1, 1 -1, 2 -0.7392481, 3 -0.5953571, 5 0.5384615, 6 -0.25, 7 -0.8185965, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -0.871, 14 -0.93486} -{0 -1, 1 -1, 2 -0.5663158, 3 -0.9582143, 5 -0.2307692, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -0.97992} -{0 -1, 1 -1, 2 -0.8369925, 3 -0.9582143, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9589474, 8 1, 9 -1, 10 -1, 11 1, 13 -0.84, 14 -1} -{0 -1, 1 1, 2 -0.1753384, 3 -0.9046429, 5 -0.8461538, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.832, 14 -1} -{0 -1, 1 1, 2 -0.1630075, 3 -0.875, 5 -0.5384615, 6 -0.25, 7 -0.9852632, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.84, 14 -1} -{0 -1, 1 1, 2 -0.8270677, 3 -0.3153571, 5 -0.2307692, 6 -0.25, 7 -0.9445614, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.993} -{0 1, 1 1, 2 -0.4285714, 3 -0.8928571, 5 0.8461538, 6 0.75, 7 -0.6140351, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.7368421, 3 -0.9910714, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9912281, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -0.9986} -{0 1, 1 1, 2 -0.4159399, 3 -0.7828571, 4 -1, 5 0.07692308, 6 0.75, 7 -0.8568421, 8 1, 9 1, 10 -0.9701493, 11 1, 13 -0.82, 14 -0.63946} -{0 1, 1 -1, 2 -0.4911278, 3 -0.1428571, 5 0.07692308, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -0.78, 14 -0.99962} -{0 1, 1 1, 2 -0.7193985, 3 -0.8214286, 5 0.07692308, 6 -0.25, 7 -0.9238596, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.94, 14 -0.95632} -{0 1, 1 1, 2 -0.6015038, 3 -0.9464286, 5 0.07692308, 6 0.75, 7 -0.7017544, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.688, 14 -0.997} -{0 -1, 1 -1, 2 -0.7993985, 3 -0.25, 4 -1, 5 1, 6 0.75, 7 -1, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.846, 14 -0.99936} -{0 -1, 1 1, 2 0.1603008, 3 -0.9017857, 4 -1, 5 0.07692308, 6 0.75, 7 -0.3361404, 8 1, 9 -1, 10 -1, 11 1, 13 -0.8, 14 -0.998} -{0 1, 1 1, 2 -0.7193985, 3 -0.1785714, 5 0.2307692, 6 0.75, 7 -0.8508772, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.71, 14 -0.99432} -{0 -1, 1 1, 2 -0.1254135, 3 -0.9107143, 5 -0.07692308, 6 -0.25, 7 -0.02631579, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.648, 14 -0.99776} -{0 -1, 1 1, 2 0.8369925, 3 0.3571429, 4 -1, 5 -1, 6 -1, 7 -0.997193, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -1, 14 -0.99298} -{0 1, 1 1, 2 -0.6616541, 3 -0.1071429, 5 -0.2307692, 6 -0.25, 7 -0.7894737, 8 1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.98, 14 -1} -{0 1, 1 1, 2 -0.2231578, 3 -0.006071429, 5 0.2307692, 6 -0.25, 7 -0.3947368, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -0.93, 14 -1} -{0 1, 1 -1, 2 0.02255639, 3 -0.4285714, 5 0.07692308, 6 -0.25, 7 -0.4473684, 8 1, 9 1, 10 -0.8208955, 11 1, 13 -1, 14 -0.9748} -{0 1, 1 -1, 2 0.01263152, 3 -0.7857143, 5 1, 6 -0.25, 7 -0.02631579, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.481, 14 -0.96592} -{0 1, 1 1, 2 -0.7166917, 3 -1, 5 0.8461538, 6 -0.25, 7 -0.9940351, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 1, 2 -0.7344361, 3 -0.8928571, 4 -1, 5 -0.2307692, 6 -0.25, 7 -0.9621053, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.88, 14 -0.99866} -{0 1, 1 1, 2 -0.6090226, 3 -0.9196429, 5 1, 6 0.75, 7 -0.9122807, 8 1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -0.89404} -{0 -1, 1 1, 2 0.4911279, 3 -0.9614286, 5 0.07692308, 6 -0.25, 7 -0.9589474, 8 1, 9 1, 10 -0.9104478, 11 1, 13 -0.82, 14 -1} -{0 -1, 1 1, 2 -0.6992481, 3 -0.9703571, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 1, 10 -0.9402985, 11 -1, 13 -0.872, 14 -0.99988} -{0 1, 1 -1, 2 -0.7894737, 3 -0.2678571, 5 0.5384615, 6 -0.25, 7 -0.9501754, 8 1, 9 1, 10 -0.9402985, 11 1, 13 -0.951, 14 -1} -{0 -1, 1 -1, 2 -0.6766917, 3 -0.875, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.868, 14 -1} -{0 1, 1 1, 2 -0.927218, 3 -0.9971429, 5 0.07692308, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.5263158, 3 -0.8571429, 4 -1, 5 0.3846154, 6 0.75, 7 -0.8596491, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.744, 14 -0.99966} -{0 1, 1 -1, 2 0.1753384, 3 0.07142857, 5 0.07692308, 6 -0.25, 7 -0.6140351, 8 1, 9 1, 10 -0.5820896, 11 -1, 13 -1, 14 -0.956} -{0 -1, 1 1, 2 -0.4412029, 3 -0.75, 5 -0.5384615, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.768, 14 -1} -{0 -1, 1 1, 2 -0.7795489, 3 -0.7053571, 4 -1, 5 -0.6923077, 6 0.75, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.86, 14 -0.998} -{0 -1, 1 1, 2 -0.5663158, 3 -0.9910714, 4 -1, 5 -0.5384615, 6 -0.25, 7 -0.9940351, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.784, 14 -0.958} -{0 -1, 1 1, 2 -0.8421053, 3 -0.875, 4 -1, 5 0.07692308, 6 -0.25, 7 -0.8361404, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.888, 14 -0.99988} -{0 -1, 1 1, 2 -0.5840602, 3 -0.7678571, 4 -1, 5 0.5384615, 6 0.75, 7 -0.6431579, 8 -1, 9 1, 10 -0.9402985, 11 1, 13 -0.631, 14 -0.99998} -{0 1, 1 1, 2 -0.5765414, 3 -0.8928571, 5 0.2307692, 6 -0.25, 7 -0.8596491, 8 1, 9 1, 10 -0.6716418, 11 1, 13 -0.566, 14 -0.9993} -{0 1, 1 1, 2 -0.2105263, 3 -0.5357143, 5 -0.2307692, 7 -0.754386, 8 1, 9 1, 10 -0.9701493, 11 -1, 13 -1, 14 -0.99} -{0 -1, 1 -1, 2 -0.290827, 3 -0.8214286, 5 -0.6923077, 6 0.75, 7 -0.9852632, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.74, 14 -0.99508} -{0 1, 1 1, 2 -0.1353383, 3 -0.6489286, 4 -1, 5 0.2307692, 6 -0.25, 7 -0.7778947, 8 1, 9 -1, 10 -1, 11 1, 13 -0.948, 14 -0.97116} -{0 1, 1 1, 2 0.2932331, 3 -0.125, 5 -0.07692308, 6 -0.25, 7 -0.9122807, 8 1, 9 1, 10 -0.880597, 11 1, 13 -0.8, 14 -1} -{0 -1, 1 1, 2 -0.115188, 3 -0.6428571, 5 -0.6923077, 7 -0.8421053, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.859, 14 -1} -{0 -1, 1 -1, 2 -0.6992481, 3 -0.9492857, 5 0.2307692, 6 -0.25, 7 -0.9824561, 8 -1, 9 1, 10 -0.9701493, 11 1, 13 -0.76, 14 -0.99992} -{0 1, 1 1, 2 -0.8571429, 3 -0.8571429, 5 -0.6923077, 6 -0.25, 7 -0.8947368, 8 1, 9 1, 10 -0.9402985, 11 -1, 13 -0.88, 14 -0.994} -{0 -1, 1 -1, 2 -0.1855638, 3 -0.75, 5 -0.6923077, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 -1, 12 -1, 13 0.16, 14 -1} -{0 1, 1 -1, 2 -0.6766917, 3 -0.9642857, 5 0.5384615, 6 0.75, 7 -0.8947368, 8 1, 9 -1, 10 -1, 11 -1, 13 -0.72, 14 -0.98352} -{0 1, 1 1, 2 -0.1503759, 3 -0.3007143, 5 1, 6 0.75, 7 -0.4414035, 8 1, 9 1, 10 -0.761194, 11 -1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.8270677, 3 -0.9882143, 5 0.5384615, 6 -0.25, 7 -0.997193, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.62, 14 -1} -{0 -1, 1 1, 2 -0.7669173, 3 -0.1785714, 5 -0.6923077, 6 -0.25, 7 -0.9649123, 8 1, 9 -1, 10 -1, 11 1, 13 -0.9, 14 -0.99864} -{0 -1, 1 1, 2 -0.4736842, 3 -0.7975, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.8507463, 11 -1, 13 -0.824, 14 -0.99708} -{0 1, 1 1, 2 -0.593985, 3 -0.8867857, 5 0.8461538, 6 0.75, 7 -0.8712281, 8 1, 9 1, 10 -0.641791, 11 1, 13 -0.417, 14 -0.98574} -{0 -1, 1 1, 2 0.05263158, 3 0.8810714, 4 -1, 5 -1, 6 -1, 7 -1, 8 1, 9 -1, 10 -1, 11 1, 13 -1, 14 -1} -{0 -1, 1 -1, 2 -0.4986466, 3 -0.9017857, 5 0.2307692, 6 0.75, 7 -0.997193, 8 -1, 9 1, 10 -0.9104478, 11 -1, 13 -1, 14 -0.99934} -{0 -1, 1 1, 2 -0.5287218, 3 -0.9107143, 5 0.2307692, 6 -0.25, 7 -0.877193, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.8, 14 -1} -{0 1, 1 1, 2 -0.5639098, 3 -0.64, 4 -1, 5 0.07692308, 7 -0.8947368, 8 1, 9 1, 10 -0.761194, 11 1, 13 -0.856, 14 -0.99986} -{0 1, 1 1, 2 -0.2030075, 3 0.5357143, 5 0.3846154, 6 1, 7 0.4035088, 8 1, 9 1, 10 -0.6716418, 11 -1, 13 -1, 14 -0.976} -{0 -1, 1 1, 2 -0.3157895, 3 -0.6964286, 5 0.5384615, 6 -0.25, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.546, 14 -0.999} -{0 -1, 1 1, 2 -0.6442105, 3 -0.9760714, 5 -0.5384615, 6 0.75, 7 -0.754386, 8 -1, 9 -1, 10 -1, 11 1, 13 -0.66, 14 -1} -{0 -1, 1 1, 2 -0.516391, 3 -0.75, 5 0.07692308, 6 -0.25, 7 -0.9884211, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.784, 14 -1} -{0 -1, 1 1, 2 -0.7193985, 3 -1, 5 -0.5384615, 6 -0.25, 7 -0.9298246, 8 -1, 9 1, 10 -0.6716418, 11 -1, 12 -1, 13 -1, 14 -1} -{0 1, 1 -1, 2 -0.4460151, 3 -0.8957143, 5 0.2307692, 6 -0.25, 7 -0.9238596, 8 1, 9 1, 10 -0.5223881, 11 -1, 13 -0.88, 14 -0.95842} -{0 1, 1 1, 2 -0.6565414, 3 -0.75, 5 0.8461538, 6 -0.25, 7 -0.9561404, 8 1, 9 1, 10 -0.7910448, 11 -1, 13 -1, 14 -0.85882} -{0 -1, 1 -1, 2 -0.3557895, 3 -0.7321429, 5 -1, 6 -1, 7 -1, 8 -1, 9 1, 10 -0.8208955, 11 -1, 13 -1, 14 -0.996} -{0 -1, 1 -1, 2 -0.8547368, 3 -0.2857143, 5 -0.8461538, 6 -0.25, 7 -0.9708772, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.92, 14 -0.99916} -{0 -1, 1 1, 2 -0.2129324, 3 -0.6428571, 5 -0.6923077, 7 -0.9852632, 8 -1, 9 -1, 10 -1, 11 -1, 13 -0.45, 14 -1} -{0 -1, 1 1, 2 -0.7091729, 3 -0.9285714, 5 0.07692308, 6 -0.25, 7 -0.9649123, 8 -1, 9 -1, 10 -1, 11 1, 12 -1, 13 -0.72, 14 -1} -% JvR: Rest of dataset truncated for space reasons. \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/data.arff.gz b/sklearn/datasets/tests/mock_openml/292/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..6821829e1e43a250e8dee84c85287a55a2291ac0 GIT binary patch literal 2532 zcmVT;|acZ3%k5;(l0M(_}cEkn$I=cSEo-kJHsY5`}cqU$?E@osZYD7`p}%&51*Un z%bVA)UtV5r)A!QX&d*P`5A~0*-7lxzr`@62w_-lS&L8Xgzz$K~e)l^Fxj*hNPluNs z9HqLyKb{_Thfl0ICdrS-{r>n87fu)0^-VnABdfaKu;ZcCs;PE|GrX(WbG5(J><3so zH`SqGk9E~tPW6x1YzKPn_Inl$2fP1XpN_0LJb;+XnVssV<1?J)^Js@xMnxvPrUf6V28^SM8o}PRg$ZUT-D^NAy+NA>c~}3 zt_E^daC({6PSENJT0b!;c=h(DcX#iu{@`H7YbF@{k?e-wIvuoA?wYCiPI#fEx7WKJ69S9lMRw&LV9F-+%+e7tT2Q=OFtg3s=I)pgQ3u zisiT5*&r47Q?bE&ErlqFy~%RDZUqZUq>(D{;5(7t!R|VJx}PXELqIN_EJ5!LAc(+8h$yr7mOTDJ#(*> z+E_xc@sj&sC)N%+yE#~|3C)9YS}WU~A;305tGTbiMEM9YCas?zA!sgxH`61`{hjrP z14}LX2vgDMs?$G-c5deE9*YoFT484;wHLB?w6R@wE#gQ3+$;*c zndz#noZEMdVAf^1#fn}uG%lxu%B~DzUTY&n@7q*OWmtxjwv_A5wOmM4)dW@6!0KFa zQ3~@V^KY!|IK)Gc6q>6L-QPPuBxIRo`6%LqH^CBR#-%Lt(<8Vc3?RNq`ebZZDW|}? z;EhcY80*|X-g*m6qQ&D0HpRbhh9l}mfVdVWsL-<(=R3t$k<^>+;4}Rl7dj^1D8jS# zt%6!llo_A~Lb^V~1tt?kWP>ULKU+QmN_1q2K*3F{7pY8lM;7bg3XAa+n_8Ciu(Gmbe;G4N2LV`x!!PG*D!aN}89 zo;t-1p{G<#zV)hlP4z6avqgbhi~^o}=Ll*+x*B0x&`MJERYJ$2%oN*G&X>ZC=N_Xs z{&Lz`js5KiA0TK$EGL(r-~}+0V{#5 zmIrWk9tJ_D+=ZB!Hl@SNZC%$iGU9rk$t{5PQ5EbK^qSDqW$^F|WHAqkbEGdzOA{rO`EWB}%Xc4UK8W;POU=oOKjPhWJsLRr=8zOu%bp0Ol-cpmEsECsy zgK0noZL94!=h)DeN!*tCDSV6uy(1{i#BHrNLxaa)XS{LL9z{h(9=es)E;4s&>N`|4 zGegf*m!U(KnLV%dNNE7JURvDP&6C3Bg3&&U%XrQRHGa6J{Y%#wL&;vC$gO$%+JOcR<&Z+&T`U_2 zur-*yi9N69fzEK5C864YA$;@$9fq{5R2Nf*x2G^UeAhcr{k6VS3 zzAjJPm*WfH?FB*Qu@sRy>kSNcbF&a1a4W_%5Akuo>ElR?$+SKjz{73y{M{?|_va69 u*oXSuu;XKT1UNnVdb%9$tMnZ5@f07py|3A+uFl89`S$-Y(|E+*EC2xdp!${o literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/292/data_description.json b/sklearn/datasets/tests/mock_openml/292/data_description.json deleted file mode 100644 index 5db8d76a8642f..0000000000000 --- a/sklearn/datasets/tests/mock_openml/292/data_description.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "data_set_description": { - "id": "292", - "name": "Australian", - "version": "1", - "description": "**Author**: Statlog\/LibSVM \n**Source**: Unknown - 2014-11-14 \n**Please cite**: \n\nThis is the famous Australian dataset, retrieved 2014-11-14 from the libSVM site.\nIt was normalized.\n\nSource: Statlog \/ Australian\n# of classes: 2\n# of data: 690\n# of features: 14", - "format": "Sparse_ARFF", - "creator": "Statlog\/LibSVM", - "collection_date": "2014-11-14", - "upload_date": "2014-08-15T16:00:28", - "licence": "Public", - "url": "https:\/\/www.openml.org\/data\/v1\/download\/49822\/Australian.sparse_arff", - "file_id": "49822", - "default_target_attribute": "Y", - "tag": ["mythbusting_1", "study_1", "study_15", "study_20", "study_34", "study_41", "study_52", "study_7"], - "visibility": "public", - "status": "deactivated", - "md5_checksum": "b15594cf2e24945b12418638bc5c2531" - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/data_description.json.gz b/sklearn/datasets/tests/mock_openml/292/data_description.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..888140f92b36025bdaf00eba9eeb917fd9c3964e GIT binary patch literal 547 zcmV+;0^I!{iwFp5lS^9w17u-zVP9lrb7OL8aCB*JZZ2wbZ*BlpQca87Fc3W_ze2b- zvxzOmP7~j9StzuyG~0zz6(h@XELN6`J`%Re{`X2&S|^~xo0+GXHy`iIMbZ*WYQt>Z zGD9^VEmtzB!25EsNOV&heyg9yn0|3i3Ju0Uu3*jH~RjP{wD}ZuXtRP&$B66MtBZdLW?L-VtET4OB zfPc1Upd*8F2F&U}=*_qG05r3jvomXNvvyhy(?=1N7@v8K|nF^q*Bh;_JcAsDEjuGp0V89{{stZ+Yn9*@0+OYcY{qZq| zsP=57r`Y|>u5l#YJYJcG1j$jcd(o>%4fVO zW?bCxOElxp$?tg9-0+4AZr_50@n$f_@57nkZ5i<^IQs#&F*LMgO?yUPjT-`?fn~Wb lXonao_C?u1RKVSKvukKcQMrN1a`CbJ_zTS2bE$~~005Kz4Z;8b literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/292/data_features.json b/sklearn/datasets/tests/mock_openml/292/data_features.json deleted file mode 100644 index 64d925a7b5cf2..0000000000000 --- a/sklearn/datasets/tests/mock_openml/292/data_features.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "data_features": { - "feature": [{ - "index": "0", - "name": "Y", - "data_type": "nominal", - "is_target": "true", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "1", - "name": "X1", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "2", - "name": "X2", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "3", - "name": "X3", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "4", - "name": "X4", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "5", - "name": "X5", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "6", - "name": "X6", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "7", - "name": "X7", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "8", - "name": "X8", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "9", - "name": "X9", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "10", - "name": "X10", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "11", - "name": "X11", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "12", - "name": "X12", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "13", - "name": "X13", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "14", - "name": "X14", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/292/data_features.json.gz b/sklearn/datasets/tests/mock_openml/292/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..5a7138dd9d6a105b56cfc180f0d6af5fb75abf87 GIT binary patch literal 286 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 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/40675/data_description.json b/sklearn/datasets/tests/mock_openml/40675/data_description.json deleted file mode 100644 index aadfd42f76ebc..0000000000000 --- a/sklearn/datasets/tests/mock_openml/40675/data_description.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "data_set_description": { - "id": "40675", - "name": "glass2", - "version": "1", - "description": "glass2-pmlb", - "format": "ARFF", - "upload_date": "2017-04-06T12:13:53", - "licence": "public", - "url": "https:\/\/www.openml.org\/data\/v1\/download\/4965250\/glass2.arff", - "file_id": "4965250", - "default_target_attribute": "class", - "visibility": "public", - "status": "deactivated", - "md5_checksum": "c00f64361bc3aa37601743fdb6957f3f" - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40675/data_description.json.gz b/sklearn/datasets/tests/mock_openml/40675/data_description.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..42b876f0a4723653c6cb004a8e54e432ec995450 GIT binary patch literal 323 zcmV-J0lfYniwFovwM$z717u-zVP9lrb7OL8aCB*JZZ2wbZ*Blxkh^ZfFbqX!`zs2~ zO)Oh}Al|y<1B#9Y3|fywi2Q&=$0&mQd!@)7+KoEABJbrRO^5)5-bw6*blmC%^*oXG z?U5!4(ZW}xq;*q~_W&jsWk44L&J~f}rFHQS$s_qYX%`=s(G0P#W;+6g*2m}h9ND^< z8AR{hycQHRZw|CP(E2Mc+MKl&i#nsZocK$#tb>2;->nJginzG8%erjaw&T3WX*9># zUb-yA?6Q0At9hHkt}ZK2byZZf%c8?0SfzG{+Q@!SA4R{(6s!h&1bgu(14OHbHCpCj z$bJ&-^q`H#@Bcm>0N Vsv5-Kz-mHqY6ejN{RfWc3?}ZQ-Nz_Uawe>Q`X}pj8t4N^kVP5C_JwrDI p8JU>}T?#zqtE=bd!~XH_C(*8;Ztr5RuBlnsj3RkYqxBgW7yu)}A3gv8 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json b/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json deleted file mode 100644 index eac4aba40fa36..0000000000000 --- a/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "data": { - "dataset": [{ - "did": 40675, - "name": "glass2", - "version": 1, - "status": "deactivated", - "format": "ARFF", - "file_id": 4965250, - "quality": [{ - "name": "MajorityClassSize", - "value": "87.0" - }, { - "name": "MinorityClassSize", - "value": "76.0" - }, { - "name": "NumberOfClasses", - "value": "2.0" - }, { - "name": "NumberOfFeatures", - "value": "10.0" - }, { - "name": "NumberOfInstances", - "value": "163.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "0.0" - }, { - "name": "NumberOfMissingValues", - "value": "0.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "9.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "1.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json.gz b/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..2f48ea985b4c919414b26c75e4f3a909fa37554a GIT binary patch literal 296 zcmV+@0oVQ?iwFp(w@X_917~bub8|9ZF<)e5VPkY@c42g7WG-rRZ*BmkkikmBKoEw{ z%~O;;7fGT?tTzz?9;#qL4dS(d7oRh*y4usY03SL>91(56*kUg!Kh sLpKE(nVAP&3OwbjtLNv#{_*c8(XOCw?_#g6sae^KB6&}v^%)o#0FuWbod5s; literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/40966/data.arff b/sklearn/datasets/tests/mock_openml/40966/data.arff deleted file mode 100644 index 1140d5a0482e9..0000000000000 --- a/sklearn/datasets/tests/mock_openml/40966/data.arff +++ /dev/null @@ -1,92 +0,0 @@ -@relation mice_protein -@attribute MouseID {'18899_1','18899_10','18899_11','18899_12','18899_13','18899_14','18899_15','18899_2','18899_3','18899_4','18899_5','18899_6','18899_7','18899_8','18899_9','293_1','293_10','293_11','293_12','293_13','293_14','293_15','293_2','293_3','293_4','293_5','293_6','293_7','293_8','293_9','294_1','294_10','294_11','294_12','294_13','294_14','294_15','294_2','294_3','294_4','294_5','294_6','294_7','294_8','294_9','309_1','309_10','309_11','309_12','309_13','309_14','309_15','309_2','309_3','309_4','309_5','309_6','309_7','309_8','309_9','311_1','311_10','311_11','311_12','311_13','311_14','311_15','311_2','311_3','311_4','311_5','311_6','311_7','311_8','311_9','320_1','320_10','320_11','320_12','320_13','320_14','320_15','320_2','320_3','320_4','320_5','320_6','320_7','320_8','320_9','321_1','321_10','321_11','321_12','321_13','321_14','321_15','321_2','321_3','321_4','321_5','321_6','321_7','321_8','321_9','322_1','322_10','322_11','322_12','322_13','322_14','322_15','322_2','322_3','322_4','322_5','322_6','322_7','322_8','322_9','3411_1','3411_10','3411_11','3411_12','3411_13','3411_14','3411_15','3411_2','3411_3','3411_4','3411_5','3411_6','3411_7','3411_8','3411_9','3412_1','3412_10','3412_11','3412_12','3412_13','3412_14','3412_15','3412_2','3412_3','3412_4','3412_5','3412_6','3412_7','3412_8','3412_9','3413_1','3413_10','3413_11','3413_12','3413_13','3413_14','3413_15','3413_2','3413_3','3413_4','3413_5','3413_6','3413_7','3413_8','3413_9','3414_1','3414_10','3414_11','3414_12','3414_13','3414_14','3414_15','3414_2','3414_3','3414_4','3414_5','3414_6','3414_7','3414_8','3414_9','3415_1','3415_10','3415_11','3415_12','3415_13','3415_14','3415_15','3415_2','3415_3','3415_4','3415_5','3415_6','3415_7','3415_8','3415_9','3416_1','3416_10','3416_11','3416_12','3416_13','3416_14','3416_15','3416_2','3416_3','3416_4','3416_5','3416_6','3416_7','3416_8','3416_9','3417_1','3417_10','3417_11','3417_12','3417_13','3417_14','3417_15','3417_2','3417_3','3417_4','3417_5','3417_6','3417_7','3417_8','3417_9','3418_1','3418_10','3418_11','3418_12','3418_13','3418_14','3418_15','3418_2','3418_3','3418_4','3418_5','3418_6','3418_7','3418_8','3418_9','3419_1','3419_10','3419_11','3419_12','3419_13','3419_14','3419_15','3419_2','3419_3','3419_4','3419_5','3419_6','3419_7','3419_8','3419_9','3420_1','3420_10','3420_11','3420_12','3420_13','3420_14','3420_15','3420_2','3420_3','3420_4','3420_5','3420_6','3420_7','3420_8','3420_9','3421_1','3421_10','3421_11','3421_12','3421_13','3421_14','3421_15','3421_2','3421_3','3421_4','3421_5','3421_6','3421_7','3421_8','3421_9','3422_1','3422_10','3422_11','3422_12','3422_13','3422_14','3422_15','3422_2','3422_3','3422_4','3422_5','3422_6','3422_7','3422_8','3422_9','3423_1','3423_10','3423_11','3423_12','3423_13','3423_14','3423_15','3423_2','3423_3','3423_4','3423_5','3423_6','3423_7','3423_8','3423_9','3424_1','3424_10','3424_11','3424_12','3424_13','3424_14','3424_15','3424_2','3424_3','3424_4','3424_5','3424_6','3424_7','3424_8','3424_9','3425_1','3425_10','3425_11','3425_12','3425_13','3425_14','3425_15','3425_2','3425_3','3425_4','3425_5','3425_6','3425_7','3425_8','3425_9','3426_1','3426_10','3426_11','3426_12','3426_13','3426_14','3426_15','3426_2','3426_3','3426_4','3426_5','3426_6','3426_7','3426_8','3426_9','3429_1','3429_10','3429_11','3429_12','3429_13','3429_14','3429_15','3429_2','3429_3','3429_4','3429_5','3429_6','3429_7','3429_8','3429_9','3476_1','3476_10','3476_11','3476_12','3476_13','3476_14','3476_15','3476_2','3476_3','3476_4','3476_5','3476_6','3476_7','3476_8','3476_9','3477_1','3477_10','3477_11','3477_12','3477_13','3477_14','3477_15','3477_2','3477_3','3477_4','3477_5','3477_6','3477_7','3477_8','3477_9','3478_1','3478_10','3478_11','3478_12','3478_13','3478_14','3478_15','3478_2','3478_3','3478_4','3478_5','3478_6','3478_7','3478_8','3478_9','3479_1','3479_10','3479_11','3479_12','3479_13','3479_14','3479_15','3479_2','3479_3','3479_4','3479_5','3479_6','3479_7','3479_8','3479_9','3480_1','3480_10','3480_11','3480_12','3480_13','3480_14','3480_15','3480_2','3480_3','3480_4','3480_5','3480_6','3480_7','3480_8','3480_9','3481_1','3481_10','3481_11','3481_12','3481_13','3481_14','3481_15','3481_2','3481_3','3481_4','3481_5','3481_6','3481_7','3481_8','3481_9','3483_1','3483_10','3483_11','3483_12','3483_13','3483_14','3483_15','3483_2','3483_3','3483_4','3483_5','3483_6','3483_7','3483_8','3483_9','3484_1','3484_10','3484_11','3484_12','3484_13','3484_14','3484_15','3484_2','3484_3','3484_4','3484_5','3484_6','3484_7','3484_8','3484_9','3488_1','3488_10','3488_11','3488_12','3488_13','3488_14','3488_15','3488_2','3488_3','3488_4','3488_5','3488_6','3488_7','3488_8','3488_9','3489_1','3489_10','3489_11','3489_12','3489_13','3489_14','3489_15','3489_2','3489_3','3489_4','3489_5','3489_6','3489_7','3489_8','3489_9','3490_1','3490_10','3490_11','3490_12','3490_13','3490_14','3490_15','3490_2','3490_3','3490_4','3490_5','3490_6','3490_7','3490_8','3490_9','3491_1','3491_10','3491_11','3491_12','3491_13','3491_14','3491_15','3491_2','3491_3','3491_4','3491_5','3491_6','3491_7','3491_8','3491_9','3497_1','3497_10','3497_11','3497_12','3497_13','3497_14','3497_15','3497_2','3497_3','3497_4','3497_5','3497_6','3497_7','3497_8','3497_9','3498_1','3498_10','3498_11','3498_12','3498_13','3498_14','3498_15','3498_2','3498_3','3498_4','3498_5','3498_6','3498_7','3498_8','3498_9','3499_1','3499_10','3499_11','3499_12','3499_13','3499_14','3499_15','3499_2','3499_3','3499_4','3499_5','3499_6','3499_7','3499_8','3499_9','3500_1','3500_10','3500_11','3500_12','3500_13','3500_14','3500_15','3500_2','3500_3','3500_4','3500_5','3500_6','3500_7','3500_8','3500_9','3501_1','3501_10','3501_11','3501_12','3501_13','3501_14','3501_15','3501_2','3501_3','3501_4','3501_5','3501_6','3501_7','3501_8','3501_9','3502_1','3502_10','3502_11','3502_12','3502_13','3502_14','3502_15','3502_2','3502_3','3502_4','3502_5','3502_6','3502_7','3502_8','3502_9','3503_1','3503_10','3503_11','3503_12','3503_13','3503_14','3503_15','3503_2','3503_3','3503_4','3503_5','3503_6','3503_7','3503_8','3503_9','3504_1','3504_10','3504_11','3504_12','3504_13','3504_14','3504_15','3504_2','3504_3','3504_4','3504_5','3504_6','3504_7','3504_8','3504_9','3505_1','3505_10','3505_11','3505_12','3505_13','3505_14','3505_15','3505_2','3505_3','3505_4','3505_5','3505_6','3505_7','3505_8','3505_9','3507_1','3507_10','3507_11','3507_12','3507_13','3507_14','3507_15','3507_2','3507_3','3507_4','3507_5','3507_6','3507_7','3507_8','3507_9','3513_1','3513_10','3513_11','3513_12','3513_13','3513_14','3513_15','3513_2','3513_3','3513_4','3513_5','3513_6','3513_7','3513_8','3513_9','3516_1','3516_10','3516_11','3516_12','3516_13','3516_14','3516_15','3516_2','3516_3','3516_4','3516_5','3516_6','3516_7','3516_8','3516_9','3517_1','3517_10','3517_11','3517_12','3517_13','3517_14','3517_15','3517_2','3517_3','3517_4','3517_5','3517_6','3517_7','3517_8','3517_9','3520_1','3520_10','3520_11','3520_12','3520_13','3520_14','3520_15','3520_2','3520_3','3520_4','3520_5','3520_6','3520_7','3520_8','3520_9','3521_1','3521_10','3521_11','3521_12','3521_13','3521_14','3521_15','3521_2','3521_3','3521_4','3521_5','3521_6','3521_7','3521_8','3521_9','3522_1','3522_10','3522_11','3522_12','3522_13','3522_14','3522_15','3522_2','3522_3','3522_4','3522_5','3522_6','3522_7','3522_8','3522_9','3525_1','3525_10','3525_11','3525_12','3525_13','3525_14','3525_15','3525_2','3525_3','3525_4','3525_5','3525_6','3525_7','3525_8','3525_9','3530_1','3530_10','3530_11','3530_12','3530_13','3530_14','3530_15','3530_2','3530_3','3530_4','3530_5','3530_6','3530_7','3530_8','3530_9','3534_1','3534_10','3534_11','3534_12','3534_13','3534_14','3534_15','3534_2','3534_3','3534_4','3534_5','3534_6','3534_7','3534_8','3534_9','3605_1','3605_10','3605_11','3605_12','3605_13','3605_14','3605_15','3605_2','3605_3','3605_4','3605_5','3605_6','3605_7','3605_8','3605_9','3606_1','3606_10','3606_11','3606_12','3606_13','3606_14','3606_15','3606_2','3606_3','3606_4','3606_5','3606_6','3606_7','3606_8','3606_9','361_1','361_10','361_11','361_12','361_13','361_14','361_15','361_2','361_3','361_4','361_5','361_6','361_7','361_8','361_9','362_1','362_10','362_11','362_12','362_13','362_14','362_15','362_2','362_3','362_4','362_5','362_6','362_7','362_8','362_9','363_1','363_10','363_11','363_12','363_13','363_14','363_15','363_2','363_3','363_4','363_5','363_6','363_7','363_8','363_9','364_1','364_10','364_11','364_12','364_13','364_14','364_15','364_2','364_3','364_4','364_5','364_6','364_7','364_8','364_9','365_1','365_10','365_11','365_12','365_13','365_14','365_15','365_2','365_3','365_4','365_5','365_6','365_7','365_8','365_9','50810A_1','50810A_10','50810A_11','50810A_12','50810A_13','50810A_14','50810A_15','50810A_2','50810A_3','50810A_4','50810A_5','50810A_6','50810A_7','50810A_8','50810A_9','50810B_1','50810B_10','50810B_11','50810B_12','50810B_13','50810B_14','50810B_15','50810B_2','50810B_3','50810B_4','50810B_5','50810B_6','50810B_7','50810B_8','50810B_9','50810C_1','50810C_10','50810C_11','50810C_12','50810C_13','50810C_14','50810C_15','50810C_2','50810C_3','50810C_4','50810C_5','50810C_6','50810C_7','50810C_8','50810C_9','50810D_1','50810D_10','50810D_11','50810D_12','50810D_13','50810D_14','50810D_15','50810D_2','50810D_3','50810D_4','50810D_5','50810D_6','50810D_7','50810D_8','50810D_9','50810E_1','50810E_10','50810E_11','50810E_12','50810E_13','50810E_14','50810E_15','50810E_2','50810E_3','50810E_4','50810E_5','50810E_6','50810E_7','50810E_8','50810E_9','50810F_1','50810F_10','50810F_11','50810F_12','50810F_13','50810F_14','50810F_15','50810F_2','50810F_3','50810F_4','50810F_5','50810F_6','50810F_7','50810F_8','50810F_9','J1291_1','J1291_10','J1291_11','J1291_12','J1291_13','J1291_14','J1291_15','J1291_2','J1291_3','J1291_4','J1291_5','J1291_6','J1291_7','J1291_8','J1291_9','J2292_1','J2292_10','J2292_11','J2292_12','J2292_13','J2292_14','J2292_15','J2292_2','J2292_3','J2292_4','J2292_5','J2292_6','J2292_7','J2292_8','J2292_9','J3295_1','J3295_10','J3295_11','J3295_12','J3295_13','J3295_14','J3295_15','J3295_2','J3295_3','J3295_4','J3295_5','J3295_6','J3295_7','J3295_8','J3295_9'} -@attribute DYRK1A_N numeric -@attribute ITSN1_N numeric -@attribute BDNF_N numeric -@attribute NR1_N numeric -@attribute NR2A_N numeric -@attribute pAKT_N numeric -@attribute pBRAF_N numeric -@attribute pCAMKII_N numeric -@attribute pCREB_N numeric -@attribute pELK_N numeric -@attribute pERK_N numeric -@attribute pJNK_N numeric -@attribute PKCA_N numeric -@attribute pMEK_N numeric -@attribute pNR1_N numeric -@attribute pNR2A_N numeric -@attribute pNR2B_N numeric -@attribute pPKCAB_N numeric -@attribute pRSK_N numeric -@attribute AKT_N numeric -@attribute BRAF_N numeric -@attribute CAMKII_N numeric -@attribute CREB_N numeric -@attribute ELK_N numeric -@attribute ERK_N numeric -@attribute GSK3B_N numeric -@attribute JNK_N numeric -@attribute MEK_N numeric -@attribute TRKA_N numeric -@attribute RSK_N numeric -@attribute APP_N numeric -@attribute Bcatenin_N numeric -@attribute SOD1_N numeric -@attribute MTOR_N numeric -@attribute P38_N numeric -@attribute pMTOR_N numeric -@attribute DSCR1_N numeric -@attribute AMPKA_N numeric -@attribute NR2B_N numeric -@attribute pNUMB_N numeric -@attribute RAPTOR_N numeric -@attribute TIAM1_N numeric -@attribute pP70S6_N numeric -@attribute NUMB_N numeric -@attribute P70S6_N numeric -@attribute pGSK3B_N numeric -@attribute pPKCG_N numeric -@attribute CDK5_N numeric -@attribute S6_N numeric -@attribute ADARB1_N numeric -@attribute AcetylH3K9_N numeric -@attribute RRP1_N numeric -@attribute BAX_N numeric -@attribute ARC_N numeric -@attribute ERBB4_N numeric -@attribute nNOS_N numeric -@attribute Tau_N numeric -@attribute GFAP_N numeric -@attribute GluR3_N numeric -@attribute GluR4_N numeric -@attribute IL1B_N numeric -@attribute P3525_N numeric -@attribute pCASP9_N numeric -@attribute PSD95_N numeric -@attribute SNCA_N numeric -@attribute Ubiquitin_N numeric -@attribute pGSK3B_Tyr216_N numeric -@attribute SHH_N numeric -@attribute BAD_N numeric -@attribute BCL2_N numeric -@attribute pS6_N numeric -@attribute pCFOS_N numeric -@attribute SYP_N numeric -@attribute H3AcK18_N numeric -@attribute EGR1_N numeric -@attribute H3MeK4_N numeric -@attribute CaNA_N numeric -@attribute Genotype {'Control','Ts65Dn'} -@attribute Treatment {'Memantine','Saline'} -@attribute Behavior {'C/S','S/C'} -@attribute class {'c-CS-m','c-CS-s','c-SC-m','c-SC-s','t-CS-m','t-CS-s','t-SC-m','t-SC-s'} -@data -'309_1',0.503643884,0.747193224,0.4301753,2.81632854,5.990151664,0.218830018,0.177565491,2.373744337,0.232223754,1.750935592,0.687906244,0.306381721,0.402698444,0.296927319,1.022060272,0.605672641,1.877683671,2.308745322,0.44159937,0.859365767,0.416289147,0.369608036,0.178944258,1.866358085,3.685247193,1.537226709,0.264526295,0.319676975,0.813866457,0.165845972,0.453909789,3.037620642,0.369509553,0.458538507,0.335335828,0.825192043,0.576915501,0.448099271,0.58627142,0.394721292,0.339570613,0.482863896,0.294169785,0.182150472,0.84272515,0.192608387,1.443090669,0.29469997,0.354604528,1.339069956,0.170118794,0.159102447,0.18885166,0.106305209,0.144989339,0.176667682,0.125190375,0.115290892,0.228043456,0.14275561,0.430957458,0.247537821,1.603309981,2.014874607,0.108234339,1.044979186,0.831556503,0.18885166,0.122652046,?,0.106305209,0.108335872,0.427099198,0.114783227,0.131790029,0.128185603,1.67565235,'Control','Memantine','C/S','c-CS-m' -'309_2',0.51461708,0.689063548,0.411770344,2.789514042,5.685037861,0.211636155,0.172817023,2.292149909,0.226972108,1.596376881,0.69500623,0.299051088,0.385986773,0.281318892,0.956675932,0.587558708,1.725773986,2.043036519,0.445221892,0.834659254,0.400364229,0.356177514,0.17367967,1.761046679,3.48528707,1.509249497,0.25572702,0.304418672,0.780504169,0.157193521,0.430940286,2.921882488,0.342279306,0.423559858,0.324834659,0.761717627,0.545097287,0.420876066,0.545097287,0.368254577,0.321959168,0.454519314,0.276430557,0.182086309,0.847614612,0.194815275,1.439459795,0.294059816,0.354548277,1.306323088,0.171427093,0.158128945,0.184570009,0.106592156,0.150470868,0.178309014,0.13427507,0.118234503,0.238073062,0.142036635,0.457156163,0.257632205,1.671737556,2.004605195,0.109748525,1.009883059,0.849270413,0.200403601,0.11668219,?,0.106592156,0.10431543,0.441581289,0.111973507,0.13510297,0.1311187,1.743609645,'Control','Memantine','C/S','c-CS-m' -'309_3',0.509183088,0.730246795,0.418308781,2.687201071,5.622058542,0.209010905,0.175722212,2.283336522,0.230246795,1.561316243,0.677348383,0.291276067,0.381002487,0.28171035,1.003634972,0.602448823,1.731872967,2.017983547,0.467667878,0.814329443,0.399846949,0.36808877,0.173904725,1.765544289,3.571455902,1.501243543,0.259613545,0.3117467,0.785154008,0.160895351,0.423187297,2.944136216,0.343696193,0.425004783,0.324851731,0.757030802,0.543619667,0.404629807,0.552994069,0.363879855,0.3130859,0.447197245,0.256648173,0.18438769,0.856165847,0.200737337,1.52436418,0.301880744,0.386086771,1.279600342,0.185456294,0.148696303,0.190532165,0.108303056,0.145330199,0.176212866,0.132560376,0.117760205,0.244817269,0.142444967,0.510472323,0.255343022,1.663549904,2.016830519,0.108196196,0.996847617,0.846708698,0.193684548,0.118508228,?,0.108303056,0.106219278,0.435776875,0.111882881,0.133361829,0.127431075,1.926426587,'Control','Memantine','C/S','c-CS-m' -'309_4',0.442106692,0.61707615,0.358626307,2.466947197,4.97950319,0.222885842,0.176462604,2.152300801,0.207004208,1.595086195,0.583276775,0.296728655,0.37708701,0.313831953,0.875390254,0.520293199,1.566852179,2.132754174,0.477670694,0.727704629,0.385638659,0.362970001,0.179448894,1.286276639,2.970137098,1.419709515,0.259535768,0.279218135,0.734491652,0.162209855,0.410614904,2.500203611,0.344509298,0.429211348,0.330120809,0.746979775,0.54676259,0.386860323,0.547848514,0.366770734,0.328491923,0.442649654,0.398534003,0.161767701,0.760233521,0.184169439,1.612382051,0.29638178,0.290679519,1.19876451,0.159799063,0.16611228,0.185323468,0.103183762,0.14065576,0.163804222,0.123209558,0.117439413,0.234946711,0.145068223,0.430995859,0.251103116,1.484624262,1.957233046,0.119883239,0.990224696,0.833276763,0.192111873,0.13278121,?,0.103183762,0.111261965,0.391690992,0.130405268,0.147444165,0.146901093,1.700563438,'Control','Memantine','C/S','c-CS-m' -'309_5',0.434940244,0.617429838,0.358802202,2.36578488,4.718678663,0.213105949,0.173626964,2.134013697,0.192157916,1.504229891,0.550960118,0.286961192,0.363502081,0.277964281,0.864912045,0.507989795,1.480059084,2.013696791,0.483416141,0.687793742,0.367530549,0.355310863,0.174835504,1.324694508,2.896334094,1.35987646,0.250704982,0.273667249,0.702699073,0.154827447,0.398549752,2.456559688,0.329125822,0.408755203,0.313414798,0.691956493,0.536860481,0.360816436,0.512823956,0.35155096,0.312206258,0.419094938,0.393447026,0.16020025,0.768112919,0.185718259,1.645807259,0.29682937,0.309345015,1.206994855,0.164650257,0.16068697,0.188221388,0.104783757,0.141983034,0.167709637,0.136837714,0.116047838,0.255527743,0.140870533,0.481226533,0.25177305,1.534835211,2.009108608,0.119524406,0.997774997,0.878667779,0.205604228,0.129954109,?,0.104783757,0.110693923,0.434153803,0.118481435,0.140314282,0.148379919,1.839730218,'Control','Memantine','C/S','c-CS-m' -'309_6',0.447506385,0.62817583,0.36738809,2.38593897,4.807635435,0.218577766,0.176233365,2.14128243,0.195187525,1.442398172,0.566339562,0.289823901,0.363892996,0.26683694,0.85912085,0.521306627,1.538244388,1.968275306,0.495899987,0.672402205,0.36940449,0.357171663,0.179728458,1.227449926,2.956983466,1.447909665,0.250840167,0.284043554,0.704395752,0.156875924,0.391047184,2.467132679,0.327597795,0.404489851,0.296276381,0.674418605,0.539723081,0.354214276,0.51431644,0.347224089,0.303132141,0.412824304,0.382578304,0.162330317,0.77969457,0.186792986,1.634615385,0.28803733,0.332367081,1.12344457,0.175692873,0.150593891,0.183823529,0.106476244,0.13956448,0.174844457,0.130514706,0.115243213,0.236849548,0.13645362,0.478577489,0.244485294,1.507777149,2.003535068,0.120687217,0.920178167,0.843679299,0.190469457,0.131575226,?,0.106476244,0.109445701,0.439833145,0.11665724,0.140766403,0.14218043,1.816388575,'Control','Memantine','C/S','c-CS-m' -'309_7',0.428032684,0.573695789,0.342708988,2.334223759,4.473130107,0.225172847,0.184003771,2.012413576,0.195788812,1.612036455,0.509899434,0.299654305,0.37115022,0.277655563,0.844280327,0.485386549,1.494814582,2.01257071,0.497485858,0.646134507,0.395977373,0.359522313,0.186046512,1.10779384,2.599622879,1.364236329,0.261470773,0.276241358,0.693117536,0.162162162,0.405562539,2.288812068,0.345380264,0.427561282,0.333909491,0.757542426,0.558610937,0.368950346,0.544626021,0.360307982,0.329352608,0.420490258,0.465116279,0.145565999,0.70224765,0.177033102,1.773845525,0.292194524,0.266857376,1.03228443,0.147854516,0.149816101,0.181610135,0.097834083,0.142787086,0.15185942,0.115978749,0.114752758,0.22451982,0.144830405,0.415529219,0.238005721,1.338782182,1.861708214,0.117041275,1.028769922,0.798283613,0.181610135,0.141806293,?,0.097834083,0.111483449,0.406293421,0.13722926,0.156681651,0.157498978,1.528483858,'Control','Memantine','C/S','c-CS-m' -% JvR: Rest of dataset truncated for space reasons. \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40966/data.arff.gz b/sklearn/datasets/tests/mock_openml/40966/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..43ec977bf67acca1421e65a62f1c6b699de94ebc GIT binary patch literal 6471 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 JkqQ#he*izqRiOX? literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/40966/data_description.json b/sklearn/datasets/tests/mock_openml/40966/data_description.json deleted file mode 100644 index 133fbd313d2ff..0000000000000 --- a/sklearn/datasets/tests/mock_openml/40966/data_description.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "data_set_description": { - "id": "40966", - "name": "MiceProtein", - "version": "4", - "description": "**Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios \n**Source**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/datasets\/Mice+Protein+Expression) - 2015 \n**Please cite**: Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): e0129126.\n\nExpression levels of 77 proteins measured in the cerebral cortex of 8 classes of control and Down syndrome mice exposed to context fear conditioning, a task used to assess associative learning.\n\nThe data set consists of the expression levels of 77 proteins\/protein modifications that produced detectable signals in the nuclear fraction of cortex. There are 38 control mice and 34 trisomic mice (Down syndrome), for a total of 72 mice. In the experiments, 15 measurements were registered of each protein per sample\/mouse. Therefore, for control mice, there are 38x15, or 570 measurements, and for trisomic mice, there are 34x15, or 510 measurements. The dataset contains a total of 1080 measurements per protein. Each measurement can be considered as an independent sample\/mouse. \n\nThe eight classes of mice are described based on features such as genotype, behavior and treatment. According to genotype, mice can be control or trisomic. According to behavior, some mice have been stimulated to learn (context-shock) and others have not (shock-context) and in order to assess the effect of the drug memantine in recovering the ability to learn in trisomic mice, some mice have been injected with the drug and others have not. \n\nClasses: \n```\n* c-CS-s: control mice, stimulated to learn, injected with saline (9 mice) \n* c-CS-m: control mice, stimulated to learn, injected with memantine (10 mice) \n* c-SC-s: control mice, not stimulated to learn, injected with saline (9 mice) \n* c-SC-m: control mice, not stimulated to learn, injected with memantine (10 mice) \n* t-CS-s: trisomy mice, stimulated to learn, injected with saline (7 mice) \n* t-CS-m: trisomy mice, stimulated to learn, injected with memantine (9 mice) \n* t-SC-s: trisomy mice, not stimulated to learn, injected with saline (9 mice) \n* t-SC-m: trisomy mice, not stimulated to learn, injected with memantine (9 mice) \n```\n\nThe aim is to identify subsets of proteins that are discriminant between the classes. \n\n### Attribute Information:\n\n```\n1 Mouse ID \n2..78 Values of expression levels of 77 proteins; the names of proteins are followed by “_nâ€\u009d indicating that they were measured in the nuclear fraction. For example: DYRK1A_n \n79 Genotype: control (c) or trisomy (t) \n80 Treatment type: memantine (m) or saline (s) \n81 Behavior: context-shock (CS) or shock-context (SC) \n82 Class: c-CS-s, c-CS-m, c-SC-s, c-SC-m, t-CS-s, t-CS-m, t-SC-s, t-SC-m \n```\n\n### Relevant Papers:\n\nHiguera C, Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6): e0129126. [Web Link] journal.pone.0129126 \n\nAhmed MM, Dhanasekaran AR, Block A, Tong S, Costa ACS, Stasko M, et al. (2015) Protein Dynamics Associated with Failed and Rescued Learning in the Ts65Dn Mouse Model of Down Syndrome. PLoS ONE 10(3): e0119491.", - "format": "ARFF", - "upload_date": "2017-11-08T16:00:15", - "licence": "Public", - "url": "https:\/\/www.openml.org\/data\/v1\/download\/17928620\/MiceProtein.arff", - "file_id": "17928620", - "default_target_attribute": "class", - "row_id_attribute": "MouseID", - "ignore_attribute": ["Genotype", "Treatment", "Behavior"], - "tag": ["OpenML-CC18", "study_135", "study_98", "study_99"], - "visibility": "public", - "status": "active", - "md5_checksum": "3c479a6885bfa0438971388283a1ce32" - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40966/data_description.json.gz b/sklearn/datasets/tests/mock_openml/40966/data_description.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..02b25d717f925451397d3e7903768be470cc2f95 GIT binary patch literal 1659 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 G0ssKk`;FQF literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json b/sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json deleted file mode 100644 index 2adcf796408aa..0000000000000 --- a/sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "data": { - "dataset": [{ - "did": 40966, - "name": "MiceProtein", - "version": 4, - "status": "active", - "format": "ARFF", - "file_id": 17928620, - "quality": [{ - "name": "MajorityClassSize", - "value": "150.0" - }, { - "name": "MinorityClassSize", - "value": "105.0" - }, { - "name": "NumberOfClasses", - "value": "8.0" - }, { - "name": "NumberOfFeatures", - "value": "82.0" - }, { - "name": "NumberOfInstances", - "value": "1080.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "528.0" - }, { - "name": "NumberOfMissingValues", - "value": "1396.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "77.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "5.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json.gz b/sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..712545f0b72d59e3cf5b8d2338bfe45b4cedadd6 GIT binary patch literal 311 zcmV-70m%LziwFpnyGvUD18r$zWpHwDbY*F7UrujsWnW=qbZK^FE^2dcZUBXmO-lnY z5Qfj)Ur}-{l3m>|Zz3#ssEP$Wh?I0Y)sbw1Nw!eS{&$m2E#h{YOOkmr&pVUJKAMm< zGmKnM_tC_kH5ePdy4VW1w!sxGvuxH2f;C_jGRGPol{A2Y_?s;#jZ(ODFKEL|t6egy z4Q}C(w~?x0t^~Pxs;XZRIV}5Hab6}xmQb&MwTz?L9UJ=70Q;26Ufpu0^#Z>S_O=hk z+dd;s=>;WD>}J#dG>Q;S(^2}qZC0QjHa!h`z!pKW0y`UZ3QdCSov@P?^$9qp#rTs4 z_zRkkIckmK{n<$X+(V66V&|-IWn#k=L? z<#W*9z_}L}m)%Y&6-e$i%Re29&XOC8T6wc7u>|C7D1w}D$*a1BHWETG8$D#%#zeti zV~5_LKaA#=1A(;K&hXcD3?JI~UpE4*o#IcG?S}y2%8Ik@dCG!UblN-c_e4unAVx&D zXbDwLj{&qhG5xeT2G#L1Oq`r?bH6Czn!X318TacoHSE=1^iKJ=QF#s9ONWQkPe|`$ xv=-G{!}^-Hw+TCy_g`)>Z(PP;Z^CpXXIlIdv3-h{BpyXl`~qE$Tz4-6001vRkRt#9 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/561/cpu_None_active.json b/sklearn/datasets/tests/mock_openml/561/cpu_None_active.json deleted file mode 100644 index a2ca5687aebab..0000000000000 --- a/sklearn/datasets/tests/mock_openml/561/cpu_None_active.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "data": { - "dataset": [{ - "did": 561, - "name": "cpu", - "version": 1, - "status": "active", - "format": "ARFF", - "file_id": 52739, - "quality": [{ - "name": "MajorityClassSize", - "value": "-1.0" - }, { - "name": "MaxNominalAttDistinctValues", - "value": "30.0" - }, { - "name": "MinorityClassSize", - "value": "-1.0" - }, { - "name": "NumberOfClasses", - "value": "-1.0" - }, { - "name": "NumberOfFeatures", - "value": "8.0" - }, { - "name": "NumberOfInstances", - "value": "209.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "0.0" - }, { - "name": "NumberOfMissingValues", - "value": "0.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "7.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "1.0" - }] - }, { - "did": 796, - "name": "cpu", - "version": 2, - "status": "active", - "format": "ARFF", - "file_id": 53330, - "quality": [{ - "name": "MajorityClassSize", - "value": "156.0" - }, { - "name": "MaxNominalAttDistinctValues", - "value": "30.0" - }, { - "name": "MinorityClassSize", - "value": "53.0" - }, { - "name": "NumberOfClasses", - "value": "2.0" - }, { - "name": "NumberOfFeatures", - "value": "8.0" - }, { - "name": "NumberOfInstances", - "value": "209.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "0.0" - }, { - "name": "NumberOfMissingValues", - "value": "0.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "6.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "2.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/561/cpu_None_active.json.gz b/sklearn/datasets/tests/mock_openml/561/cpu_None_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..4436afa6bc760a05f49a8702dc24171e37fd0f65 GIT binary patch literal 348 zcmV-i0i*sOiwFn^mrGj!17mP?UrujsWnW=qbZK^FE^2dcZUF65O;3YB6g-z-(d@Yz zU;~J^MnmGEHL-~vjA^!XtIsTp?nh&7`0p+sZDR^TiisC5EHk{B_wtt6S_8BsilEEk z)*6)Wk}3lqb8HA$8sPcPsDPX#)L<09X;d<6DkP-bkX4CPL}{59kyyc+R&}dXBqTRR zg1QwgG+3fW@TSne1`)+1^@sugrxES literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/561/data.arff b/sklearn/datasets/tests/mock_openml/561/data.arff deleted file mode 100644 index a2fcd666801ef..0000000000000 --- a/sklearn/datasets/tests/mock_openml/561/data.arff +++ /dev/null @@ -1,303 +0,0 @@ -% -% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -% -% Attributes 2 and 8 deleted. -% -% As used by Kilpatrick, D. & Cameron-Jones, M. (1998). Numeric prediction -% using instance-based learning with encoding length selection. In Progress -% in Connectionist-Based Information Systems. Singapore: Springer-Verlag. -% -% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -% -% 1. Title: Relative CPU Performance Data -% -% 2. Source Information -% -- Creators: Phillip Ein-Dor and Jacob Feldmesser -% -- Ein-Dor: Faculty of Management; Tel Aviv University; Ramat-Aviv; -% Tel Aviv, 69978; Israel -% -- Donor: David W. Aha (aha@ics.uci.edu) (714) 856-8779 -% -- Date: October, 1987 -% -% 3. Past Usage: -% 1. Ein-Dor and Feldmesser (CACM 4/87, pp 308-317) -% -- Results: -% -- linear regression prediction of relative cpu performance -% -- Recorded 34% average deviation from actual values -% 2. Kibler,D. & Aha,D. (1988). Instance-Based Prediction of -% Real-Valued Attributes. In Proceedings of the CSCSI (Canadian -% AI) Conference. -% -- Results: -% -- instance-based prediction of relative cpu performance -% -- similar results; no transformations required -% - Predicted attribute: cpu relative performance (numeric) -% -% 4. Relevant Information: -% -- The estimated relative performance values were estimated by the authors -% using a linear regression method. See their article (pp 308-313) for -% more details on how the relative performance values were set. -% -% 5. Number of Instances: 209 -% -% 6. Number of Attributes: 10 (6 predictive attributes, 2 non-predictive, -% 1 goal field, and the linear regression's guess) -% -% 7. Attribute Information: -% 1. vendor name: 30 -% (adviser, amdahl,apollo, basf, bti, burroughs, c.r.d, cambex, cdc, dec, -% dg, formation, four-phase, gould, honeywell, hp, ibm, ipl, magnuson, -% microdata, nas, ncr, nixdorf, perkin-elmer, prime, siemens, sperry, -% sratus, wang) -% 2. Model Name: many unique symbols -% 3. MYCT: machine cycle time in nanoseconds (integer) -% 4. MMIN: minimum main memory in kilobytes (integer) -% 5. MMAX: maximum main memory in kilobytes (integer) -% 6. CACH: cache memory in kilobytes (integer) -% 7. CHMIN: minimum channels in units (integer) -% 8. CHMAX: maximum channels in units (integer) -% 9. PRP: published relative performance (integer) -% 10. ERP: estimated relative performance from the original article (integer) -% -% 8. Missing Attribute Values: None -% -% 9. Class Distribution: the class value (PRP) is continuously valued. -% PRP Value Range: Number of Instances in Range: -% 0-20 31 -% 21-100 121 -% 101-200 27 -% 201-300 13 -% 301-400 7 -% 401-500 4 -% 501-600 2 -% above 600 4 -% -% Summary Statistics: -% Min Max Mean SD PRP Correlation -% MCYT: 17 1500 203.8 260.3 -0.3071 -% MMIN: 64 32000 2868.0 3878.7 0.7949 -% MMAX: 64 64000 11796.1 11726.6 0.8630 -% CACH: 0 256 25.2 40.6 0.6626 -% CHMIN: 0 52 4.7 6.8 0.6089 -% CHMAX: 0 176 18.2 26.0 0.6052 -% PRP: 6 1150 105.6 160.8 1.0000 -% ERP: 15 1238 99.3 154.8 0.9665 -% - -@relation 'cpu' -@attribute vendor { adviser, amdahl, apollo, basf, bti, burroughs, c.r.d, cdc, cambex, dec, dg, formation, four-phase, gould, hp, harris, honeywell, ibm, ipl, magnuson, microdata, nas, ncr, nixdorf, perkin-elmer, prime, siemens, sperry, sratus, wang} -@attribute MYCT real -@attribute MMIN real -@attribute MMAX real -@attribute CACH real -@attribute CHMIN real -@attribute CHMAX real -@attribute class real -@data -adviser,125,256,6000,256,16,128,199 -amdahl,29,8000,32000,32,8,32,253 -amdahl,29,8000,32000,32,8,32,253 -amdahl,29,8000,32000,32,8,32,253 -amdahl,29,8000,16000,32,8,16,132 -amdahl,26,8000,32000,64,8,32,290 -amdahl,23,16000,32000,64,16,32,381 -amdahl,23,16000,32000,64,16,32,381 -amdahl,23,16000,64000,64,16,32,749 -amdahl,23,32000,64000,128,32,64,1238 -apollo,400,1000,3000,0,1,2,23 -apollo,400,512,3500,4,1,6,24 -basf,60,2000,8000,65,1,8,70 -basf,50,4000,16000,65,1,8,117 -bti,350,64,64,0,1,4,15 -bti,200,512,16000,0,4,32,64 -burroughs,167,524,2000,8,4,15,23 -burroughs,143,512,5000,0,7,32,29 -burroughs,143,1000,2000,0,5,16,22 -burroughs,110,5000,5000,142,8,64,124 -burroughs,143,1500,6300,0,5,32,35 -burroughs,143,3100,6200,0,5,20,39 -burroughs,143,2300,6200,0,6,64,40 -burroughs,110,3100,6200,0,6,64,45 -c.r.d,320,128,6000,0,1,12,28 -c.r.d,320,512,2000,4,1,3,21 -c.r.d,320,256,6000,0,1,6,28 -c.r.d,320,256,3000,4,1,3,22 -c.r.d,320,512,5000,4,1,5,28 -c.r.d,320,256,5000,4,1,6,27 -cdc,25,1310,2620,131,12,24,102 -cdc,25,1310,2620,131,12,24,102 -cdc,50,2620,10480,30,12,24,74 -cdc,50,2620,10480,30,12,24,74 -cdc,56,5240,20970,30,12,24,138 -cdc,64,5240,20970,30,12,24,136 -cdc,50,500,2000,8,1,4,23 -cdc,50,1000,4000,8,1,5,29 -cdc,50,2000,8000,8,1,5,44 -cambex,50,1000,4000,8,3,5,30 -cambex,50,1000,8000,8,3,5,41 -cambex,50,2000,16000,8,3,5,74 -cambex,50,2000,16000,8,3,6,74 -cambex,50,2000,16000,8,3,6,74 -dec,133,1000,12000,9,3,12,54 -dec,133,1000,8000,9,3,12,41 -dec,810,512,512,8,1,1,18 -dec,810,1000,5000,0,1,1,28 -dec,320,512,8000,4,1,5,36 -dec,200,512,8000,8,1,8,38 -dg,700,384,8000,0,1,1,34 -dg,700,256,2000,0,1,1,19 -dg,140,1000,16000,16,1,3,72 -dg,200,1000,8000,0,1,2,36 -dg,110,1000,4000,16,1,2,30 -dg,110,1000,12000,16,1,2,56 -dg,220,1000,8000,16,1,2,42 -formation,800,256,8000,0,1,4,34 -formation,800,256,8000,0,1,4,34 -formation,800,256,8000,0,1,4,34 -formation,800,256,8000,0,1,4,34 -formation,800,256,8000,0,1,4,34 -four-phase,125,512,1000,0,8,20,19 -gould,75,2000,8000,64,1,38,75 -gould,75,2000,16000,64,1,38,113 -gould,75,2000,16000,128,1,38,157 -hp,90,256,1000,0,3,10,18 -hp,105,256,2000,0,3,10,20 -hp,105,1000,4000,0,3,24,28 -hp,105,2000,4000,8,3,19,33 -hp,75,2000,8000,8,3,24,47 -hp,75,3000,8000,8,3,48,54 -hp,175,256,2000,0,3,24,20 -harris,300,768,3000,0,6,24,23 -harris,300,768,3000,6,6,24,25 -harris,300,768,12000,6,6,24,52 -harris,300,768,4500,0,1,24,27 -harris,300,384,12000,6,1,24,50 -harris,300,192,768,6,6,24,18 -harris,180,768,12000,6,1,31,53 -honeywell,330,1000,3000,0,2,4,23 -honeywell,300,1000,4000,8,3,64,30 -honeywell,300,1000,16000,8,2,112,73 -honeywell,330,1000,2000,0,1,2,20 -honeywell,330,1000,4000,0,3,6,25 -honeywell,140,2000,4000,0,3,6,28 -honeywell,140,2000,4000,0,4,8,29 -honeywell,140,2000,4000,8,1,20,32 -honeywell,140,2000,32000,32,1,20,175 -honeywell,140,2000,8000,32,1,54,57 -honeywell,140,2000,32000,32,1,54,181 -honeywell,140,2000,32000,32,1,54,181 -honeywell,140,2000,4000,8,1,20,32 -ibm,57,4000,16000,1,6,12,82 -ibm,57,4000,24000,64,12,16,171 -ibm,26,16000,32000,64,16,24,361 -ibm,26,16000,32000,64,8,24,350 -ibm,26,8000,32000,0,8,24,220 -ibm,26,8000,16000,0,8,16,113 -ibm,480,96,512,0,1,1,15 -ibm,203,1000,2000,0,1,5,21 -ibm,115,512,6000,16,1,6,35 -ibm,1100,512,1500,0,1,1,18 -ibm,1100,768,2000,0,1,1,20 -ibm,600,768,2000,0,1,1,20 -ibm,400,2000,4000,0,1,1,28 -ibm,400,4000,8000,0,1,1,45 -ibm,900,1000,1000,0,1,2,18 -ibm,900,512,1000,0,1,2,17 -ibm,900,1000,4000,4,1,2,26 -ibm,900,1000,4000,8,1,2,28 -ibm,900,2000,4000,0,3,6,28 -ibm,225,2000,4000,8,3,6,31 -ibm,225,2000,4000,8,3,6,31 -ibm,180,2000,8000,8,1,6,42 -ibm,185,2000,16000,16,1,6,76 -ibm,180,2000,16000,16,1,6,76 -ibm,225,1000,4000,2,3,6,26 -ibm,25,2000,12000,8,1,4,59 -ibm,25,2000,12000,16,3,5,65 -ibm,17,4000,16000,8,6,12,101 -ibm,17,4000,16000,32,6,12,116 -ibm,1500,768,1000,0,0,0,18 -ibm,1500,768,2000,0,0,0,20 -ibm,800,768,2000,0,0,0,20 -ipl,50,2000,4000,0,3,6,30 -ipl,50,2000,8000,8,3,6,44 -ipl,50,2000,8000,8,1,6,44 -ipl,50,2000,16000,24,1,6,82 -ipl,50,2000,16000,24,1,6,82 -ipl,50,8000,16000,48,1,10,128 -magnuson,100,1000,8000,0,2,6,37 -magnuson,100,1000,8000,24,2,6,46 -magnuson,100,1000,8000,24,3,6,46 -magnuson,50,2000,16000,12,3,16,80 -magnuson,50,2000,16000,24,6,16,88 -magnuson,50,2000,16000,24,6,16,88 -microdata,150,512,4000,0,8,128,33 -nas,115,2000,8000,16,1,3,46 -nas,115,2000,4000,2,1,5,29 -nas,92,2000,8000,32,1,6,53 -nas,92,2000,8000,32,1,6,53 -nas,92,2000,8000,4,1,6,41 -nas,75,4000,16000,16,1,6,86 -nas,60,4000,16000,32,1,6,95 -nas,60,2000,16000,64,5,8,107 -nas,60,4000,16000,64,5,8,117 -nas,50,4000,16000,64,5,10,119 -nas,72,4000,16000,64,8,16,120 -nas,72,2000,8000,16,6,8,48 -nas,40,8000,16000,32,8,16,126 -nas,40,8000,32000,64,8,24,266 -nas,35,8000,32000,64,8,24,270 -nas,38,16000,32000,128,16,32,426 -nas,48,4000,24000,32,8,24,151 -nas,38,8000,32000,64,8,24,267 -nas,30,16000,32000,256,16,24,603 -ncr,112,1000,1000,0,1,4,19 -ncr,84,1000,2000,0,1,6,21 -ncr,56,1000,4000,0,1,6,26 -ncr,56,2000,6000,0,1,8,35 -ncr,56,2000,8000,0,1,8,41 -ncr,56,4000,8000,0,1,8,47 -ncr,56,4000,12000,0,1,8,62 -ncr,56,4000,16000,0,1,8,78 -ncr,38,4000,8000,32,16,32,80 -ncr,38,4000,8000,32,16,32,80 -ncr,38,8000,16000,64,4,8,142 -ncr,38,8000,24000,160,4,8,281 -ncr,38,4000,16000,128,16,32,190 -nixdorf,200,1000,2000,0,1,2,21 -nixdorf,200,1000,4000,0,1,4,25 -nixdorf,200,2000,8000,64,1,5,67 -perkin-elmer,250,512,4000,0,1,7,24 -perkin-elmer,250,512,4000,0,4,7,24 -perkin-elmer,250,1000,16000,1,1,8,64 -prime,160,512,4000,2,1,5,25 -prime,160,512,2000,2,3,8,20 -prime,160,1000,4000,8,1,14,29 -prime,160,1000,8000,16,1,14,43 -prime,160,2000,8000,32,1,13,53 -siemens,240,512,1000,8,1,3,19 -siemens,240,512,2000,8,1,5,22 -siemens,105,2000,4000,8,3,8,31 -siemens,105,2000,6000,16,6,16,41 -siemens,105,2000,8000,16,4,14,47 -siemens,52,4000,16000,32,4,12,99 -siemens,70,4000,12000,8,6,8,67 -siemens,59,4000,12000,32,6,12,81 -siemens,59,8000,16000,64,12,24,149 -siemens,26,8000,24000,32,8,16,183 -siemens,26,8000,32000,64,12,16,275 -siemens,26,8000,32000,128,24,32,382 -sperry,116,2000,8000,32,5,28,56 -sperry,50,2000,32000,24,6,26,182 -sperry,50,2000,32000,48,26,52,227 -sperry,50,2000,32000,112,52,104,341 -sperry,50,4000,32000,112,52,104,360 -sperry,30,8000,64000,96,12,176,919 -sperry,30,8000,64000,128,12,176,978 -sperry,180,262,4000,0,1,3,24 -sperry,180,512,4000,0,1,3,24 -sperry,180,262,4000,0,1,3,24 -sperry,180,512,4000,0,1,3,24 -sperry,124,1000,8000,0,1,8,37 -sperry,98,1000,8000,32,2,8,50 -sratus,125,2000,8000,0,2,14,41 -wang,480,512,8000,32,0,0,47 -wang,480,1000,4000,0,0,0,25 diff --git a/sklearn/datasets/tests/mock_openml/561/data.arff.gz b/sklearn/datasets/tests/mock_openml/561/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..eeb088c224a01f55aacecc6ffec3b9fea8470b0f GIT binary patch literal 3303 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 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/561/data_features.json b/sklearn/datasets/tests/mock_openml/561/data_features.json deleted file mode 100644 index 6ee84439283e9..0000000000000 --- a/sklearn/datasets/tests/mock_openml/561/data_features.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "data_features": { - "feature": [{ - "index": "0", - "name": "vendor", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "1", - "name": "MYCT", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "2", - "name": "MMIN", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "3", - "name": "MMAX", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "4", - "name": "CACH", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "5", - "name": "CHMIN", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "6", - "name": "CHMAX", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "7", - "name": "class", - "data_type": "numeric", - "is_target": "true", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/561/data_features.json.gz b/sklearn/datasets/tests/mock_openml/561/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d159bbd8570d83e743701614d788c87895956a05 GIT binary patch literal 262 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 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/61/data_features.json b/sklearn/datasets/tests/mock_openml/61/data_features.json deleted file mode 100644 index eb8c5e1610363..0000000000000 --- a/sklearn/datasets/tests/mock_openml/61/data_features.json +++ /dev/null @@ -1 +0,0 @@ -{"data_features":{"feature":[{"index":"0","name":"sepallength","data_type":"numeric","is_target":"false","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"},{"index":"1","name":"sepalwidth","data_type":"numeric","is_target":"false","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"},{"index":"2","name":"petallength","data_type":"numeric","is_target":"false","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"},{"index":"3","name":"petalwidth","data_type":"numeric","is_target":"false","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"},{"index":"4","name":"class","data_type":"nominal","is_target":"true","is_ignore":"false","is_row_identifier":"false","number_of_missing_values":"0"}]}} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/61/data_features.json.gz b/sklearn/datasets/tests/mock_openml/61/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..c436e322fc7d2a5b4ce9e4c462436e5dc588985a GIT binary patch literal 210 zcmV;@04@I?iwFn~c0*eL17u-zVP9rtVRUtJWpgfSb8l_{&Ct0D!!Qhh;djxTq1TjG zDaEL<>DF57t|u9cEfjvaPcnSGEnE?KIOmhdHlR(Q`nzQb{WRM_tD8 M4N@FztRe#d03w%OQUCw| literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/61/iris_1_active.json b/sklearn/datasets/tests/mock_openml/61/iris_1_active.json deleted file mode 100644 index f8180b9a456d4..0000000000000 --- a/sklearn/datasets/tests/mock_openml/61/iris_1_active.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "data": { - "dataset": [{ - "did": 61, - "name": "iris", - "version": 1, - "status": "active", - "format": "ARFF", - "file_id": 61, - "quality": [{ - "name": "MajorityClassSize", - "value": "50.0" - }, { - "name": "MaxNominalAttDistinctValues", - "value": "3.0" - }, { - "name": "MinorityClassSize", - "value": "50.0" - }, { - "name": "NumberOfClasses", - "value": "3.0" - }, { - "name": "NumberOfFeatures", - "value": "5.0" - }, { - "name": "NumberOfInstances", - "value": "150.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "0.0" - }, { - "name": "NumberOfMissingValues", - "value": "0.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "4.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "1.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/61/iris_1_active.json.gz b/sklearn/datasets/tests/mock_openml/61/iris_1_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..6dd5e202aeccc497d38128d2e38adf9c45f24688 GIT binary patch literal 291 zcmV+;0o?u{iwFqUu}fP318H(;b6+uEVPkY@c4aPVb8l_{rIAfb!$1&*&&{tWdoI$T z_28{20S~QUK@TD_O}FjHW*2uR#ai;;oy|u@+BAM#virU}&pX3p7xmNv7}QmN7xk(; zX%_huv>3P$aTyOvWg*id6?!C9SsU#MofWsPAqLJVR6)wP(RJO@`3yp^8s8^LW1`V7 z-#WbIV34=_0ls=p;MI9~x;8*G!;d;xCIFL{6{F$VPzA3T^bg?osmsuU88hD?G1`%wNB5op{qv}&c#V4ew1*a+l005@~hUWkP literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/61/iris_None_active.json b/sklearn/datasets/tests/mock_openml/61/iris_None_active.json deleted file mode 100644 index f87a9ae4f1f7c..0000000000000 --- a/sklearn/datasets/tests/mock_openml/61/iris_None_active.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "data": { - "dataset": [{ - "did": 61, - "name": "iris", - "version": 1, - "status": "active", - "format": "ARFF", - "file_id": 61, - "quality": [{ - "name": "MajorityClassSize", - "value": "50.0" - }, { - "name": "MaxNominalAttDistinctValues", - "value": "3.0" - }, { - "name": "MinorityClassSize", - "value": "50.0" - }, { - "name": "NumberOfClasses", - "value": "3.0" - }, { - "name": "NumberOfFeatures", - "value": "5.0" - }, { - "name": "NumberOfInstances", - "value": "150.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "0.0" - }, { - "name": "NumberOfMissingValues", - "value": "0.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "4.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "1.0" - }] - }, { - "did": 969, - "name": "iris", - "version": 3, - "status": "active", - "format": "ARFF", - "file_id": 53503, - "quality": [{ - "name": "MajorityClassSize", - "value": "100.0" - }, { - "name": "MaxNominalAttDistinctValues", - "value": "-1.0" - }, { - "name": "MinorityClassSize", - "value": "50.0" - }, { - "name": "NumberOfClasses", - "value": "2.0" - }, { - "name": "NumberOfFeatures", - "value": "5.0" - }, { - "name": "NumberOfInstances", - "value": "150.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "0.0" - }, { - "name": "NumberOfMissingValues", - "value": "0.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "4.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "1.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/61/iris_None_active.json.gz b/sklearn/datasets/tests/mock_openml/61/iris_None_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..b1824cde71fe22eba689f9b31d6adef8a14d3f9a GIT binary patch literal 333 zcmV-T0kZxdiwFqiu}fP318H(;b6-wxZe?F#V{~bDWiD!SZ*BnXQ^88ZKoC7QUs3j4 zB{8N@Z$$}sXax&;5Rq-V)sf8xcP7PJ^6yU4q($18Y6Lxa$>zPC_hy*ot(=aSNs{8M zyK*|~e^kWqF2_v3j6vV)70Ad~F%)0{#hO|ui;x&*%Nis}Ddtr&B3P)hZl2g!=Eh=p z9flPNT0MN|@RCXmwA>7^?KzUqiRG(vEfFX1RvPmJQl~{l;2ygo=dxaRNBlZYVlYw< zi7o&MOhh-i5O-|+dKWO?A7PxvQ)RE_h4@QtD`lv7vv!X(Xp~+Weijq$(Rv4ryiwl* zJ&gbn%wx^+n$6nk`BWC7+GU(JI!u=FG|`_}c$LMyv-K&XFz62s$b#P{3xOZFe)~9h f?$6}m$ori@ocsskZw7)tnUlQ(ag(I&I|cv%)C-(T literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index bfaf254b240af..912e5e37e189e 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -1,5 +1,6 @@ """Test the openml loader. """ +import gzip import json import numpy as np import os @@ -80,11 +81,6 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, np.number) - if 'default_target_attribute' in data_by_id.details: - target = data_by_id.details['default_target_attribute'] - if feature_name_type[target] == 'numeric': - assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, - np.number) return data_by_id @@ -100,20 +96,20 @@ def _mock_urlopen_data_description(url): path = os.path.join(testdir_path, 'mock_openml/%d/data_description.json' % data_id) - return urlopen('file://' + path) + return gzip.open(path + ".gz", 'rb') def _mock_urlopen_data_features(url): assert (url.startswith(url_prefix_data_features)) path = os.path.join(testdir_path, 'mock_openml/%d/data_features.json' % data_id) - return urlopen('file://' + path) + return gzip.open(path + ".gz", 'rb') def _mock_urlopen_download_data(url): assert (url.startswith(url_prefix_download_data)) path = os.path.join(testdir_path, 'mock_openml/%d/data.arff' % data_id) - return urlopen('file://' + path) + return gzip.open(path + ".gz", 'rb') def _mock_urlopen_data_list(url): # url contains key value pairs of attributes, e.g., @@ -127,18 +123,18 @@ def _mock_urlopen_data_list(url): key_val_dict['data_version'] = None if 'status' not in key_val_dict: key_val_dict['status'] = "active" - mock_file = "%s_%s_%s.json" % (key_val_dict['data_name'], - key_val_dict['data_version'], - key_val_dict['status']) + mock_file = "%s_%s_%s.json.gz" % (key_val_dict['data_name'], + key_val_dict['data_version'], + key_val_dict['status']) json_file_path = os.path.join(testdir_path, 'mock_openml', str(data_id), mock_file) # load the file itself, to simulate a http error - json_data = json.loads(open(json_file_path, 'r').read()) + json_data = json.loads(gzip.open(json_file_path, 'rb').read()) if 'error' in json_data: raise HTTPError(url=None, code=412, msg='Simulated mock error', hdrs=None, fp=None) - return urlopen('file://' + json_file_path) + return gzip.open(json_file_path, 'rb') def _mock_urlopen(url): if url.startswith(url_prefix_data_list): @@ -150,7 +146,6 @@ def _mock_urlopen(url): elif url.startswith(url_prefix_data_description): return _mock_urlopen_data_description(url) else: - # This should never happen raise ValueError('Unknown mocking URL pattern: %s' % url) context.setattr(sklearn.datasets.openml, 'urlopen', _mock_urlopen) From 6ea8cfbe2d95a99ef3d2dd81fc53562d8428d1f8 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 19 Jul 2018 12:53:50 -0400 Subject: [PATCH 073/138] url open fix --- sklearn/datasets/tests/test_openml.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 912e5e37e189e..358f8db364982 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -14,14 +14,6 @@ from sklearn.externals.six.moves.urllib.error import HTTPError -try: - # Python 3+ - from urllib.request import urlopen -except ImportError: - # Python 2 - from urllib2 import urlopen - - def fetch_dataset_from_openml(data_id, data_name, data_version, target_column_name, expected_observations, expected_features, @@ -313,7 +305,6 @@ def test_raises_illegal_multitarget(monkeypatch): target_column_name=targets, cache=False) - def test_fetch_openml_raises_illegal_argument(): assert_raise_message(ValueError, "Dataset data_id=", fetch_openml, data_id=-1, name="name") From 6e681777ddeeb1a469b2d4b90e31dacc1e157efa Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 19 Jul 2018 13:17:50 -0400 Subject: [PATCH 074/138] added more tests --- sklearn/datasets/openml.py | 19 ++++++++++++++ sklearn/datasets/tests/test_openml.py | 36 +++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index ff9c04c1945ef..4875372d2806a 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -195,6 +195,15 @@ def _determine_single_target_data_type(name_feature, target_column_name): if not isinstance(target_column_name, str): raise ValueError('target_column_name should be str, ' 'got: %s' % type(target_column_name)) + if target_column_name not in name_feature: + raise KeyError('Could not find target_column_name={}') + # note: we compare to a string, not boolean + if name_feature[target_column_name]['is_ignore'] == 'true': + warn('target_column_name={} has flag is_ignore.'.format( + target_column_name)) + if name_feature[target_column_name]['is_row_identifier'] == 'true': + warn('target_column_name={} has flag is_row_identifier.'.format( + target_column_name)) if name_feature[target_column_name]['data_type'] == "numeric": return np.float64 @@ -208,10 +217,20 @@ def _determine_multi_target_data_type(name_feature, target_column_names): 'got: %s' % type(target_column_names)) found_types = set() for target_column_name in target_column_names: + if target_column_name not in name_feature: + raise KeyError('Could not find target_column_name={}') if name_feature[target_column_name]['data_type'] == "numeric": found_types.add(np.float64) else: found_types.add(object) + + # note: we compare to a string, not boolean + if name_feature[target_column_name]['is_ignore'] == 'true': + warn('target_column_name={} has flag is_ignore.'.format( + target_column_name)) + if name_feature[target_column_name]['is_row_identifier'] == 'true': + warn('target_column_name={} has flag is_row_identifier.'.format( + target_column_name)) if len(found_types) != 1: raise ValueError('Can only handle homogeneous multi-target datasets, ' 'i.e., all targets are either numeric or ' diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 358f8db364982..7554cf3e13fbe 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -305,6 +305,42 @@ def test_raises_illegal_multitarget(monkeypatch): target_column_name=targets, cache=False) +def test_warn_ignore_attribute(monkeypatch): + data_id = 40966 + expected_row_id_msg = "target_column_name={} has flag is_row_identifier." + expected_ignore_msg = "target_column_name={} has flag is_ignore." + _monkey_patch_webbased_functions(monkeypatch, data_id) + # single column test + assert_warns_message(UserWarning, expected_row_id_msg.format('MouseID'), + fetch_openml, data_id=data_id, + target_column_name='MouseID', + cache=False) + assert_warns_message(UserWarning, expected_ignore_msg.format('Genotype'), + fetch_openml, data_id=data_id, + target_column_name='Genotype', + cache=False) + # multi column test + assert_warns_message(UserWarning, expected_row_id_msg.format('MouseID'), + fetch_openml, data_id=data_id, + target_column_name=['MouseID', 'class'], + cache=False) + assert_warns_message(UserWarning, expected_ignore_msg.format('Genotype'), + fetch_openml, data_id=data_id, + target_column_name=['Genotype', 'class'], + cache=False) + +def test_illegal_column(monkeypatch): + data_id = 61 + _monkey_patch_webbased_functions(monkeypatch, data_id) + assert_raise_message(KeyError, "Could not find target_column_name=", + fetch_openml, data_id=data_id, + target_column_name='undefined', cache=False) + + assert_raise_message(KeyError, "Could not find target_column_name=", + fetch_openml, data_id=data_id, + target_column_name=['undefined', 'class'], cache=False) + + def test_fetch_openml_raises_illegal_argument(): assert_raise_message(ValueError, "Dataset data_id=", fetch_openml, data_id=-1, name="name") From 29046e144ae34785b5499f4bece35ba1a4ca42fd Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 19 Jul 2018 22:22:58 -0400 Subject: [PATCH 075/138] fix flake8 stuff --- sklearn/datasets/tests/test_openml.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 7554cf3e13fbe..d92aea3b9f51c 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -329,6 +329,7 @@ def test_warn_ignore_attribute(monkeypatch): target_column_name=['Genotype', 'class'], cache=False) + def test_illegal_column(monkeypatch): data_id = 61 _monkey_patch_webbased_functions(monkeypatch, data_id) @@ -338,7 +339,8 @@ def test_illegal_column(monkeypatch): assert_raise_message(KeyError, "Could not find target_column_name=", fetch_openml, data_id=data_id, - target_column_name=['undefined', 'class'], cache=False) + target_column_name=['undefined', 'class'], + cache=False) def test_fetch_openml_raises_illegal_argument(): From 40b5bb176c1c99471b4153a59c7f454f25d7563d Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 19 Jul 2018 22:38:40 -0400 Subject: [PATCH 076/138] added sanity check unit test --- sklearn/datasets/tests/test_openml.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index d92aea3b9f51c..bc1a54ad9db37 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -270,6 +270,17 @@ def test_fetch_openml_miceprotein(monkeypatch): compare_default_target=True) +def test_target_attribute(monkeypatch): + # simple sanity check. If this one fails, something is wrong with setting + # up the mock files. + data_id = 61 + _monkey_patch_webbased_functions(monkeypatch, data_id) + data_description = sklearn.datasets.openml._get_data_description_by_id( + data_id) + target_column_name = data_description.get('default_target_attribute', None) + assert target_column_name == 'class' + + def test_fetch_openml_inactive(monkeypatch): # fetch inactive dataset by id data_id = 40675 From 7c921c0c37d8afabb6a4d789dd1a0a8b5d0d4cdf Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 19 Jul 2018 23:00:10 -0400 Subject: [PATCH 077/138] small fixes for travis --- sklearn/datasets/openml.py | 2 +- sklearn/datasets/tests/test_openml.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 4875372d2806a..2df8fb600308c 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -38,7 +38,7 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error): url : str The URL to load from. Should be an official OpenML endpoint - error_message : str + error_message : str or None The error message to raise if an acceptable OpenML error is thrown (acceptable error is, e.g., data id not found. Other errors, like 404's will throw the native error message) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index bc1a54ad9db37..f6ec798c32326 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -272,13 +272,14 @@ def test_fetch_openml_miceprotein(monkeypatch): def test_target_attribute(monkeypatch): # simple sanity check. If this one fails, something is wrong with setting - # up the mock files. + # up the mock files. data_id = 61 _monkey_patch_webbased_functions(monkeypatch, data_id) data_description = sklearn.datasets.openml._get_data_description_by_id( data_id) target_column_name = data_description.get('default_target_attribute', None) assert target_column_name == 'class' + assert type(target_column_name) == str def test_fetch_openml_inactive(monkeypatch): From 004b831cf8f30e1955dc777b9ec744927b4f543b Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 19 Jul 2018 23:13:11 -0400 Subject: [PATCH 078/138] see if loading a non-binary file works in gzip --- sklearn/datasets/tests/test_openml.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index f6ec798c32326..4097c51d2d893 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -88,20 +88,20 @@ def _mock_urlopen_data_description(url): path = os.path.join(testdir_path, 'mock_openml/%d/data_description.json' % data_id) - return gzip.open(path + ".gz", 'rb') + return gzip.open(path + ".gz", 'r') def _mock_urlopen_data_features(url): assert (url.startswith(url_prefix_data_features)) path = os.path.join(testdir_path, 'mock_openml/%d/data_features.json' % data_id) - return gzip.open(path + ".gz", 'rb') + return gzip.open(path + ".gz", 'r') def _mock_urlopen_download_data(url): assert (url.startswith(url_prefix_download_data)) path = os.path.join(testdir_path, 'mock_openml/%d/data.arff' % data_id) - return gzip.open(path + ".gz", 'rb') + return gzip.open(path + ".gz", 'r') def _mock_urlopen_data_list(url): # url contains key value pairs of attributes, e.g., @@ -126,7 +126,7 @@ def _mock_urlopen_data_list(url): raise HTTPError(url=None, code=412, msg='Simulated mock error', hdrs=None, fp=None) - return gzip.open(json_file_path, 'rb') + return gzip.open(json_file_path, 'r') def _mock_urlopen(url): if url.startswith(url_prefix_data_list): From 02ae09f3ee3c223a99e138cfb446cae92b1f31a8 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 00:01:36 -0400 Subject: [PATCH 079/138] fix unit test? --- sklearn/datasets/tests/test_openml.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 4097c51d2d893..b3b3f2b4a0183 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -121,7 +121,8 @@ def _mock_urlopen_data_list(url): json_file_path = os.path.join(testdir_path, 'mock_openml', str(data_id), mock_file) # load the file itself, to simulate a http error - json_data = json.loads(gzip.open(json_file_path, 'rb').read()) + json_data = json.loads(gzip.open(json_file_path, 'rb').read(). + decode('utf-8')) if 'error' in json_data: raise HTTPError(url=None, code=412, msg='Simulated mock error', From 09b0fd8b2b22a53e6c70deaf40fcb28b16f311da Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 00:05:09 -0400 Subject: [PATCH 080/138] added more explicit error when unicode error arises --- sklearn/datasets/openml.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 2df8fb600308c..dbdbaa4dd9b84 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -376,8 +376,13 @@ def mem(func): indices = [int(name_feature[col_name]['index']) for col_name in target_column_name] y = np.array(data[:, indices], dtype=dtype) - else: + elif target_column_name is None: y = None + else: + # unexpected behaviour, this should never happen + raise ValueError('Could not determine how to handle' + 'target_column_name of type {}'. + format(type(target_column_name))) if all([feature['data_type'] == "numeric" for feature in features if feature['name'] in data_columns]): From bc7fd911cbf71bd242e0783860859e0b69828596 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 00:27:34 -0400 Subject: [PATCH 081/138] changed back to 'rb' --- sklearn/datasets/openml.py | 2 +- sklearn/datasets/tests/test_openml.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index dbdbaa4dd9b84..6bc70a6f375b4 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -380,7 +380,7 @@ def mem(func): y = None else: # unexpected behaviour, this should never happen - raise ValueError('Could not determine how to handle' + raise ValueError('Could not determine how to handle ' 'target_column_name of type {}'. format(type(target_column_name))) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index b3b3f2b4a0183..93607231af17a 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -88,20 +88,20 @@ def _mock_urlopen_data_description(url): path = os.path.join(testdir_path, 'mock_openml/%d/data_description.json' % data_id) - return gzip.open(path + ".gz", 'r') + return gzip.open(path + ".gz", 'rb') def _mock_urlopen_data_features(url): assert (url.startswith(url_prefix_data_features)) path = os.path.join(testdir_path, 'mock_openml/%d/data_features.json' % data_id) - return gzip.open(path + ".gz", 'r') + return gzip.open(path + ".gz", 'rb') def _mock_urlopen_download_data(url): assert (url.startswith(url_prefix_download_data)) path = os.path.join(testdir_path, 'mock_openml/%d/data.arff' % data_id) - return gzip.open(path + ".gz", 'r') + return gzip.open(path + ".gz", 'rb') def _mock_urlopen_data_list(url): # url contains key value pairs of attributes, e.g., @@ -127,7 +127,7 @@ def _mock_urlopen_data_list(url): raise HTTPError(url=None, code=412, msg='Simulated mock error', hdrs=None, fp=None) - return gzip.open(json_file_path, 'r') + return gzip.open(json_file_path, 'rb') def _mock_urlopen(url): if url.startswith(url_prefix_data_list): From 26a5f51377371332720cc9419f35c2114b870f20 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 00:39:27 -0400 Subject: [PATCH 082/138] solving all my unicode problems --- sklearn/datasets/openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 6bc70a6f375b4..91a781b0ab9e9 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -72,7 +72,7 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error): raise ValueError(error_message) else: return None - json_data = json.loads(response.read().decode("utf-8")) + json_data = json.loads(str(response.read().decode("utf-8"))) response.close() return json_data From e267f161f363281dd2d5e9f37e0456762d387e0f Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 00:55:05 -0400 Subject: [PATCH 083/138] removed str hack, proper way to handle unicode across Python versions --- sklearn/datasets/openml.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 91a781b0ab9e9..d959d4e1e96b2 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -17,6 +17,7 @@ from .base import get_data_home from ..externals.joblib import Memory +from ..externals.six import string_types from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch @@ -72,7 +73,7 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error): raise ValueError(error_message) else: return None - json_data = json.loads(str(response.read().decode("utf-8"))) + json_data = json.loads(response.read().decode("utf-8")) response.close() return json_data @@ -364,7 +365,7 @@ def mem(func): data = _convert_arff_data(arff_data) data = _convert_numericals(data, name_feature) - if isinstance(target_column_name, str): + if isinstance(target_column_name, string_types): # determine vector type dtype = _determine_single_target_data_type(name_feature, target_column_name) From 931c93f6ad36036d0b14dab431325330a30e609a Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 01:03:02 -0400 Subject: [PATCH 084/138] improved path.join handling, so Windows also likes the OpenML extension --- sklearn/datasets/tests/test_openml.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 93607231af17a..6b08f70949b7d 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -86,22 +86,23 @@ def _monkey_patch_webbased_functions(context, data_id): def _mock_urlopen_data_description(url): assert (url.startswith(url_prefix_data_description)) - path = os.path.join(testdir_path, - 'mock_openml/%d/data_description.json' % data_id) - return gzip.open(path + ".gz", 'rb') + path = os.path.join(testdir_path, 'mock_openml', str(data_id), + 'data_description.json.gz') + return gzip.open(path, 'rb') def _mock_urlopen_data_features(url): assert (url.startswith(url_prefix_data_features)) - path = os.path.join(testdir_path, - 'mock_openml/%d/data_features.json' % data_id) - return gzip.open(path + ".gz", 'rb') + path = os.path.join(testdir_path, 'mock_openml', str(data_id), + 'data_features.json.gz') + return gzip.open(path, 'rb') def _mock_urlopen_download_data(url): assert (url.startswith(url_prefix_download_data)) - path = os.path.join(testdir_path, 'mock_openml/%d/data.arff' % data_id) - return gzip.open(path + ".gz", 'rb') + path = os.path.join(testdir_path, 'mock_openml', str(data_id), + 'data.arff.gz') + return gzip.open(path, 'rb') def _mock_urlopen_data_list(url): # url contains key value pairs of attributes, e.g., From cdca9319bc0cc462f28358498acc0f9ba08f1cb3 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 01:44:36 -0400 Subject: [PATCH 085/138] removed strict string check --- sklearn/datasets/openml.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index d959d4e1e96b2..dbd4f2b201728 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -193,8 +193,8 @@ def _convert_numericals(data, name_feature): def _determine_single_target_data_type(name_feature, target_column_name): - if not isinstance(target_column_name, str): - raise ValueError('target_column_name should be str, ' + if not isinstance(target_column_name, string_types): + raise ValueError('target_column_name should be of string type, ' 'got: %s' % type(target_column_name)) if target_column_name not in name_feature: raise KeyError('Could not find target_column_name={}') From be25e365bfc581c102c94ceb0c275f0e50707f18 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 09:37:52 -0400 Subject: [PATCH 086/138] changed assertion in sanity check test --- sklearn/datasets/tests/test_openml.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 6b08f70949b7d..0535f0fb490f2 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -11,6 +11,7 @@ from sklearn.datasets.openml import _get_data_features from sklearn.utils.testing import (assert_warns_message, assert_raise_message) +from sklearn.externals.six import string_types from sklearn.externals.six.moves.urllib.error import HTTPError @@ -281,7 +282,7 @@ def test_target_attribute(monkeypatch): data_id) target_column_name = data_description.get('default_target_attribute', None) assert target_column_name == 'class' - assert type(target_column_name) == str + assert isinstance(target_column_name, string_types) def test_fetch_openml_inactive(monkeypatch): From 1582da5eb536afa22ed12b84e78818c09a551488 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 12:15:35 -0400 Subject: [PATCH 087/138] replaced last occurance of str into string_types --- sklearn/datasets/openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index dbd4f2b201728..019f424275ca9 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -348,7 +348,7 @@ def mem(func): data_columns = [] for feature in features: # determine whether `feature` is a target - if (isinstance(target_column_name, str) and + if (isinstance(target_column_name, string_types) and feature['name'] == target_column_name): is_target = True elif (isinstance(target_column_name, list) and From 0f4d22c5260f4e8bbb06af57b8ca914f4f670868 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 15:02:40 -0400 Subject: [PATCH 088/138] test to see if appveyor handles ungzipped files --- .../tests/mock_openml/2/anneal_1_active.json | 43 +++ .../mock_openml/2/anneal_1_active.json.gz | Bin 312 -> 0 bytes .../mock_openml/2/anneal_None_active.json | 43 +++ .../mock_openml/2/anneal_None_active.json.gz | Bin 315 -> 0 bytes .../datasets/tests/mock_openml/2/data.arff | 172 ++++++++++ .../datasets/tests/mock_openml/2/data.arff.gz | Bin 1841 -> 0 bytes .../tests/mock_openml/2/data_description.json | 19 ++ .../mock_openml/2/data_description.json.gz | Bin 1362 -> 0 bytes .../tests/mock_openml/2/data_features.json | 317 ++++++++++++++++++ .../tests/mock_openml/2/data_features.json.gz | Bin 666 -> 0 bytes sklearn/datasets/tests/test_openml.py | 37 +- 11 files changed, 616 insertions(+), 15 deletions(-) create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1_active.json delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_None_active.json delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_None_active.json.gz create mode 100644 sklearn/datasets/tests/mock_openml/2/data.arff delete mode 100644 sklearn/datasets/tests/mock_openml/2/data.arff.gz create mode 100644 sklearn/datasets/tests/mock_openml/2/data_description.json delete mode 100644 sklearn/datasets/tests/mock_openml/2/data_description.json.gz create mode 100644 sklearn/datasets/tests/mock_openml/2/data_features.json delete mode 100644 sklearn/datasets/tests/mock_openml/2/data_features.json.gz diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json new file mode 100644 index 0000000000000..1f8b45b70ebf3 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json @@ -0,0 +1,43 @@ +{ + "data": { + "dataset": [{ + "did": 2, + "name": "anneal", + "version": 1, + "status": "active", + "format": "ARFF", + "file_id": 1666876, + "quality": [{ + "name": "MajorityClassSize", + "value": "684.0" + }, { + "name": "MaxNominalAttDistinctValues", + "value": "7.0" + }, { + "name": "MinorityClassSize", + "value": "8.0" + }, { + "name": "NumberOfClasses", + "value": "5.0" + }, { + "name": "NumberOfFeatures", + "value": "39.0" + }, { + "name": "NumberOfInstances", + "value": "898.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "898.0" + }, { + "name": "NumberOfMissingValues", + "value": "22175.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "6.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "33.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz deleted file mode 100644 index 97ec87c488cc6f0760354de7d4ab19ce524af5cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmV-80muFyiwFqxu}fP317U7%WnpYzF<)V0bZK^FE^2dcZUBvuK~KU!5QWe5SCBmu zV_V%8Zv@lC1DHsn2V=}o796wP#@#6qN&masF5rQd_0rw#)mHHI=IWX?W<467rN8H8 zfePe==pGHB%IUdDnlnz)PeJ9GA??l1t70ki=6coZL21*H#%$ZxE4VKFKp)(8tRi>@W3Af@Y6oXJsO^+ zzvpFv3gm?79u1+&>A6XoGfvV^LFJht?aj`sVkz|Fy3KZUz4azDVb`lWqVd?9eNgu2 zsJtVbj{P&A(l1CKGc*R(re}Ho!CfXqQJDCbVNank@7)Ra5*E8+S;`BDI6gAo0{5wd N`WIgV4X!u?001tVl@tH~ diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff b/sklearn/datasets/tests/mock_openml/2/data.arff new file mode 100644 index 0000000000000..2f8010c3798cc --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/data.arff @@ -0,0 +1,172 @@ +% 1. Title of Database: Annealing Data +% +% 2. Source Information: donated by David Sterling and Wray Buntine. +% +% 3. Past Usage: unknown +% +% 4. Relevant Information: +% -- Explanation: I suspect this was left by Ross Quinlan in 1987 at the +% 4th Machine Learning Workshop. I'd have to check with Jeff Schlimmer +% to double check this. +% +% 5. Number of Instances: 798 +% +% 6. Number of Attributes: 38 +% -- 6 continuously-valued +% -- 3 integer-valued +% -- 29 nominal-valued +% +% 7. Attribute Information: +% 1. family: --,GB,GK,GS,TN,ZA,ZF,ZH,ZM,ZS +% 2. product-type: C, H, G +% 3. steel: -,R,A,U,K,M,S,W,V +% 4. carbon: continuous +% 5. hardness: continuous +% 6. temper_rolling: -,T +% 7. condition: -,S,A,X +% 8. formability: -,1,2,3,4,5 +% 9. strength: continuous +% 10. non-ageing: -,N +% 11. surface-finish: P,M,- +% 12. surface-quality: -,D,E,F,G +% 13. enamelability: -,1,2,3,4,5 +% 14. bc: Y,- +% 15. bf: Y,- +% 16. bt: Y,- +% 17. bw/me: B,M,- +% 18. bl: Y,- +% 19. m: Y,- +% 20. chrom: C,- +% 21. phos: P,- +% 22. cbond: Y,- +% 23. marvi: Y,- +% 24. exptl: Y,- +% 25. ferro: Y,- +% 26. corr: Y,- +% 27. blue/bright/varn/clean: B,R,V,C,- +% 28. lustre: Y,- +% 29. jurofm: Y,- +% 30. s: Y,- +% 31. p: Y,- +% 32. shape: COIL, SHEET +% 33. thick: continuous +% 34. width: continuous +% 35. len: continuous +% 36. oil: -,Y,N +% 37. bore: 0000,0500,0600,0760 +% 38. packing: -,1,2,3 +% classes: 1,2,3,4,5,U +% +% -- The '-' values are actually 'not_applicable' values rather than +% 'missing_values' (and so can be treated as legal discrete +% values rather than as showing the absence of a discrete value). +% +% 8. Missing Attribute Values: Signified with "?" +% Attribute: Number of instances missing its value: +% 1 0 +% 2 0 +% 3 70 +% 4 0 +% 5 0 +% 6 675 +% 7 271 +% 8 283 +% 9 0 +% 10 703 +% 11 790 +% 12 217 +% 13 785 +% 14 797 +% 15 680 +% 16 736 +% 17 609 +% 18 662 +% 19 798 +% 20 775 +% 21 791 +% 22 730 +% 23 798 +% 24 796 +% 25 772 +% 26 798 +% 27 793 +% 28 753 +% 29 798 +% 30 798 +% 31 798 +% 32 0 +% 33 0 +% 34 0 +% 35 0 +% 36 740 +% 37 0 +% 38 789 +% 39 0 +% +% 9. Distribution of Classes +% Class Name: Number of Instances: +% 1 8 +% 2 88 +% 3 608 +% 4 0 +% 5 60 +% U 34 +% --- +% 798 +% +@relation anneal.ORIG +@attribute 'family' { GB , GK , GS , TN , ZA , ZF , ZH , ZM , ZS } +@attribute 'product-type' { C , H , G } +@attribute 'steel' { R , A , U , K , M , S , W , V } +@attribute 'carbon' real +@attribute 'hardness' real +@attribute 'temper_rolling' { T } +@attribute 'condition' { S , A , X } +@attribute 'formability' { 1 , 2 , 3 , 4 , 5 } +@attribute 'strength' real +@attribute 'non-ageing' { N } +@attribute 'surface-finish' { P , M } +@attribute 'surface-quality' { D , E , F , G } +@attribute 'enamelability' { 1 , 2 , 3 , 4 , 5 } +@attribute 'bc' { Y } +@attribute 'bf' { Y } +@attribute 'bt' { Y } +@attribute 'bw%2Fme' { B , M } +@attribute 'bl' { Y } +@attribute 'm' { Y } +@attribute 'chrom' { C } +@attribute 'phos' { P } +@attribute 'cbond' { Y } +@attribute 'marvi' { Y } +@attribute 'exptl' { Y } +@attribute 'ferro' { Y } +@attribute 'corr' { Y } +@attribute 'blue%2Fbright%2Fvarn%2Fclean' { B , R , V , C } +@attribute 'lustre' { Y } +@attribute 'jurofm' { Y } +@attribute 's' { Y } +@attribute 'p' { Y } +@attribute 'shape' { COIL , SHEET } +@attribute 'thick' real +@attribute 'width' real +@attribute 'len' real +@attribute 'oil' { Y , N } +@attribute 'bore' { 0 , 500 , 600 , 760 } +@attribute 'packing' { 1 , 2 , 3 } +@attribute 'class' { 1 , 2 , 3 , 4 , 5 , U } +@data +% +% instances from file: anneal-train.arff +% +?,C,A,8,0,?,S,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,385.1,0,?,0,?,3 +?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,255,269,?,0,?,3 +?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 +?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.3,152,0,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,1320,0,?,0,?,3 +?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 +?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,610,0,?,0,?,3 +% JvR: Rest of dataset truncated for space reasons. diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff.gz b/sklearn/datasets/tests/mock_openml/2/data.arff.gz deleted file mode 100644 index 79c426cb9540b7f9af119d67d9a0487166026a4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1841 zcmV-12hR8(iwFp9hD}=l17u-zVJ=~EW@Z4bSle>jI1+u&S9DEPO1o7c!;3^pdhz%k zPsX0CWG7?4q(BO^xTZ)g0ovo*+JE21MHETFlS%C|CS-RXG`bHO=vLl?@4{^^3I&7lDSizoYDSE4*3LnRT^FOu) zEzQzbz#G10sQ|IgIlNE~14QvC<_I z@x+CjW|Od5l6+NiLCci!ImEN621H%Ju@H5hG(sZ6X&ZS2X(efFs)iS@&ND3{9|C30xWkZa)`{6&=IikOes=cjObfCQI^_d@)!| zhm_Wd-0Sw)vtU5T?wZ!Cl5swN6NC&4w%M}!TU`}0JLhuMTcbrbaKq z5L4tsa+KsnE(|FS@ku~JGA0v)n#tH|Rz8aLo38kti#t*}nEcueZR*Bok$B$J8BLj! z#Lq0dN*WAwpZ|F4E>XB=`y&dCKa6#GaqE9r(69d{3$^^x2p?d}3T_w72!YLdOF zMLHAlrWWZ;UOsGC7jV*v0m)2?H)kV>n}Kq#4UoNbT~|HCX{$x{w(E-brhjg=$X$xb zwCbw&mXWm$t)Fwd7TIEdY(-($B3l`&>&mW;WO~(g&#S#wvV{lpLsI9DYw_V3FQN}= z!Du(>Pw;?zA^SLy!J?6=Hn&+s2LIXARkpEdLu8P@$!{nbd|NBCZ%wzoojv{S>Q@5G zkLTy+IEBb0-hSy*7d1QvArktMuQ~_C20~s7R`&fl03p3qKFBAB-0zN5C<(55Q~`MS z5N{%fNDgu288lM6rRkG8o957HO`7 zTEHsjY0bpGz#STwV61L0veKatXu=uRB3X85J73THyD47C$F+8(Q!&0M%X3)fk7b_a z=!GhcKOOy~7jKcs*1odkyV3_HG{^yc&ne~ zT%RlKQ{;g<)mPH)z^gyuhU&^|YdLqwZt(J%?i9g5-YUYLJn~w_xIbfe()!0wP1z~# z`igMeURb@yaU8qCw9P-)*x)E8sQR|z{Cv)zm7)0=3fg9lml!X;&`#72hv|S-QO) z0p8_BPqAxhEvkMatCqYSn%#A?O1m@;{XRf-I$DME5fk7W;ycE7auA~KZ7n|SJ6dJw zW;nCg(kjSj#f%+hI$MQ1L)AYp5Dbkxi_93E99}HL7{FYEkm^t^nXH;piyZq(jG^V0t|1ZQR+9Y@F{#KfG}^KZpKCvzf9xo=!cS(0BNM%88Kp zli>fGXxd#r42C@HoelBx<}cXo^WbZv!%X{ecL#emJQwfbm*>SC7K{to?8!TTGl5?Z fn=(~j5V6by#~X&p>x)+A& diff --git a/sklearn/datasets/tests/mock_openml/2/data_description.json b/sklearn/datasets/tests/mock_openml/2/data_description.json new file mode 100644 index 0000000000000..dabc7f5718435 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/data_description.json @@ -0,0 +1,19 @@ +{ + "data_set_description": { + "id": "2", + "name": "anneal", + "version": "1", + "description": "**Author**: Unknown. Donated by David Sterling and Wray Buntine \n**Source**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/datasets\/Annealing) - 1990 \n**Please cite**: [UCI](https:\/\/archive.ics.uci.edu\/ml\/citation_policy.html) \n\nThe original Annealing dataset from UCI. The exact meaning of the features and classes is largely unknown. Annealing, in metallurgy and materials science, is a heat treatment that alters the physical and sometimes chemical properties of a material to increase its ductility and reduce its hardness, making it more workable. It involves heating a material to above its recrystallization temperature, maintaining a suitable temperature, and then cooling. (Wikipedia)\n\n### Attribute Information:\n 1. family: --,GB,GK,GS,TN,ZA,ZF,ZH,ZM,ZS\n 2. product-type: C, H, G\n 3. steel: -,R,A,U,K,M,S,W,V\n 4. carbon: continuous\n 5. hardness: continuous\n 6. temper_rolling: -,T\n 7. condition: -,S,A,X\n 8. formability: -,1,2,3,4,5\n 9. strength: continuous\n 10. non-ageing: -,N\n 11. surface-finish: P,M,-\n 12. surface-quality: -,D,E,F,G\n 13. enamelability: -,1,2,3,4,5\n 14. bc: Y,-\n 15. bf: Y,-\n 16. bt: Y,-\n 17. bw\/me: B,M,-\n 18. bl: Y,-\n 19. m: Y,-\n 20. chrom: C,-\n 21. phos: P,-\n 22. cbond: Y,-\n 23. marvi: Y,-\n 24. exptl: Y,-\n 25. ferro: Y,-\n 26. corr: Y,-\n 27. blue\/bright\/varn\/clean: B,R,V,C,-\n 28. lustre: Y,-\n 29. jurofm: Y,-\n 30. s: Y,-\n 31. p: Y,-\n 32. shape: COIL, SHEET\n 33. thick: continuous\n 34. width: continuous\n 35. len: continuous\n 36. oil: -,Y,N\n 37. bore: 0000,0500,0600,0760\n 38. packing: -,1,2,3\n classes: 1,2,3,4,5,U\n \n -- The '-' values are actually 'not_applicable' values rather than\n 'missing_values' (and so can be treated as legal discrete\n values rather than as showing the absence of a discrete value).", + "format": "ARFF", + "upload_date": "2014-04-06T23:19:24", + "licence": "Public", + "url": "https:\/\/www.openml.org\/data\/v1\/download\/1666876\/anneal.arff", + "file_id": "1666876", + "default_target_attribute": "class", + "version_label": "1", + "tag": ["study_1", "study_14", "study_34", "study_37", "study_41", "study_70", "study_76", "uci"], + "visibility": "public", + "status": "active", + "md5_checksum": "4eaed8b6ec9d8211024b6c089b064761" + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/data_description.json.gz b/sklearn/datasets/tests/mock_openml/2/data_description.json.gz deleted file mode 100644 index 035906031542d87495281a16a02155bdbafeb6cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1362 zcmV-Y1+DrYiwFoYfJ$2c17u-zVP9lrb7OL8aCB*JZZ2wbZ*BmUR$X)2I23(Oe#IU7 zkR~G=48%!zOVZ|Jy6t94(r!~aj4TVRjVyU38OnD0-}lOPz_j6EJ>ZdbkIub1`ndPU z{$3}gj!rFi)0A6gMB#*1oe})l-`nem6kDBshxiXgbM8N>Qk=@VZ^4bN@tvsd*=Fe+ z9i5jh)8^=C1P|&->7@$cjaJn06p|IZp$n11*l{C;ngdlSd^U6i7o~DSae#?BIvVTJ zFzzY7K3v{@d!0E~*wLgr=~BZovEZR#HY}M4d0I}oxtw(UtZ-6x(mk)jMe;)kAUZqi z)tq;dBLJ9i|Bo04P(Qh8p`~D}Fmt&)^pq2IpK;Je%!Q&7)^4E*1!hL)fNnzYK>nRF z2RWz8WAqFhcFs6;rQx>Hfk|pDwuJ>r&78{>l+OyT*$D`RERIT9n)#|4n4`ExP-($3 z!4>1gb5O{T9h|{;&K0&Y{G<}GwsKx%D=Qd=?m4VRQjw#3mhrsmE{ra?aRU1=T)K7x zPGbCA|iba3%>A_{TjBl|Y=q(_ti1~Od|CTJRg>9H zE6SO;omP}HS>nCI+lY(SBv8#n?i`LP=D!#>);`L|GQ4xzh|9GVWFQPr3=-vYDH77t|=c zlJP2UZ~O~9B%jD;swko?{dOC@M2aH*T^c>hU$PERM7vYsffsSN)$hQJ7F&yZ`RDB) z1jaXS-!?~TfMU8#u%|Za*P}2%O_w5V9hR3sD6QmbJD%S_sIV5lY^i{Jc|KMHud&{e z3ZRD%=^gu5>|ZBwuR)`<1!Ygw`D_kOZE2F%nr3~b$b$#epdhGH;X!Z!3yKSiNeYtz z=0!ZOnC%Xfc2imum}mXXy$0dsopIyymujvPfP-9Ei(yP_%mKWvvlw2B3KCwYJuEpW zCR0AgOp*$$Q@G=6hTq9O*k*d^6NpccG_gLL*4giQd_C?ktgD|oJ@~@s{NvSC-B%V; z({zeuKvh2Vd(klH;V-`L4@S}1s6VW6I89IQF?VHxU(IkMeb=TmSuU3$W@44gP@8#O z>flj`u!XgO_ciH8aU7qX#8}5vg+fTpY}Q05B%juGT?2Zq+h(+sZt8rgfwDj6JP)iE zbF1K+;*H5=tL$@hj$dCp)|KgMik9B$f!cKc-09=7l&y;eK+Z7jb!-)iT=iu$7V zo{N@9SOvJ!R@Eui9t&Rg=IQYi%NO=!%iPkpHd^-j-{UOYUB Uqt5=`&;6hO0e4b}%oPg&0Fzdr?EnA( diff --git a/sklearn/datasets/tests/mock_openml/2/data_features.json b/sklearn/datasets/tests/mock_openml/2/data_features.json new file mode 100644 index 0000000000000..b859302867253 --- /dev/null +++ b/sklearn/datasets/tests/mock_openml/2/data_features.json @@ -0,0 +1,317 @@ +{ + "data_features": { + "feature": [{ + "index": "0", + "name": "family", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "772" + }, { + "index": "1", + "name": "product-type", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "2", + "name": "steel", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "86" + }, { + "index": "3", + "name": "carbon", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "4", + "name": "hardness", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "5", + "name": "temper_rolling", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "761" + }, { + "index": "6", + "name": "condition", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "303" + }, { + "index": "7", + "name": "formability", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "318" + }, { + "index": "8", + "name": "strength", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "9", + "name": "non-ageing", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "793" + }, { + "index": "10", + "name": "surface-finish", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "889" + }, { + "index": "11", + "name": "surface-quality", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "244" + }, { + "index": "12", + "name": "enamelability", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "882" + }, { + "index": "13", + "name": "bc", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "897" + }, { + "index": "14", + "name": "bf", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "769" + }, { + "index": "15", + "name": "bt", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "824" + }, { + "index": "16", + "name": "bw%2Fme", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "687" + }, { + "index": "17", + "name": "bl", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "749" + }, { + "index": "18", + "name": "m", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "19", + "name": "chrom", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "872" + }, { + "index": "20", + "name": "phos", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "891" + }, { + "index": "21", + "name": "cbond", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "824" + }, { + "index": "22", + "name": "marvi", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "23", + "name": "exptl", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "896" + }, { + "index": "24", + "name": "ferro", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "868" + }, { + "index": "25", + "name": "corr", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "26", + "name": "blue%2Fbright%2Fvarn%2Fclean", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "892" + }, { + "index": "27", + "name": "lustre", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "847" + }, { + "index": "28", + "name": "jurofm", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "29", + "name": "s", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "30", + "name": "p", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "898" + }, { + "index": "31", + "name": "shape", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "32", + "name": "thick", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "33", + "name": "width", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "34", + "name": "len", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "35", + "name": "oil", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "834" + }, { + "index": "36", + "name": "bore", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "37", + "name": "packing", + "data_type": "nominal", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "889" + }, { + "index": "38", + "name": "class", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/data_features.json.gz b/sklearn/datasets/tests/mock_openml/2/data_features.json.gz deleted file mode 100644 index de2b76ba6c5e27466fd7ab3e610f85388b798cc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 666 zcmV;L0%iRliwFo7$~E|aGmkN887W^%8XT% z(CPSRksbBF3DfxidSL>>sWOfB(X>Vbe!x$z)=-7Ea%LQj@2aD;)76M1&(man==}VI z^zV`W0YWpW_;OXv&5GT!4Joo=j9OcE;)`rqy+G=fggW>|`IFON6sx^IAoab3#_Mrh zi~g@jf7EW6Ujf0|c|AKP%Cr5l9U1nb;2RSS;Yg1(LF~k`2{{g>0i3LjHIZLD75ie@ zh~h35f%aYO*K!_8q~8bsB0J6UER=*J?J< z^t^&ftg|$4}Dm!4j#MxL|&a@ z1gp6?YxwD>B2S9J>m(cvKmC;Zrx>{UeTe)*Pf-%peTtdeYJk8`e@5*;#;ytg{N$7F za|hme$&B6_OxMTx;wZt-Kgw#!uT(BdDyU)_+v!qh@-yH-q!TG7^6LblWr#J>u`rf7 zGL6tK?vT79?RO<{FW1wl7MRAdH|lLsJ;UCRz$`wQW<8xPfk|xjYP#$KQ#crgIglW7 zP;m$0z>rnc)??HTQoV6(hmu`Hfmy4pBtFp4`XfyLWBY$@H|Op7H;jwdjEEfo08i;r ArvLx| diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 0535f0fb490f2..50ea284fde1ba 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -77,33 +77,39 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, return data_by_id -def _monkey_patch_webbased_functions(context, data_id): +def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): testdir_path = os.path.dirname(os.path.realpath(__file__)) url_prefix_data_description = "https://openml.org/api/v1/json/data/" url_prefix_data_features = "https://openml.org/api/v1/json/data/features/" url_prefix_download_data = "https://openml.org/data/v1/" url_prefix_data_list = "https://openml.org/api/v1/json/data/list/" + path_suffix = '' + read_fn = open + if gziped_files: + path_suffix = '.gz' + read_fn = gzip.open + def _mock_urlopen_data_description(url): assert (url.startswith(url_prefix_data_description)) path = os.path.join(testdir_path, 'mock_openml', str(data_id), - 'data_description.json.gz') - return gzip.open(path, 'rb') + 'data_description.json%s' % path_suffix) + return read_fn(path, 'rb') def _mock_urlopen_data_features(url): assert (url.startswith(url_prefix_data_features)) path = os.path.join(testdir_path, 'mock_openml', str(data_id), - 'data_features.json.gz') - return gzip.open(path, 'rb') + 'data_features.json%s' % path_suffix) + return read_fn(path, 'rb') def _mock_urlopen_download_data(url): assert (url.startswith(url_prefix_download_data)) path = os.path.join(testdir_path, 'mock_openml', str(data_id), - 'data.arff.gz') - return gzip.open(path, 'rb') + 'data.arff%s' % path_suffix) + return read_fn(path, 'rb') def _mock_urlopen_data_list(url): # url contains key value pairs of attributes, e.g., @@ -117,19 +123,20 @@ def _mock_urlopen_data_list(url): key_val_dict['data_version'] = None if 'status' not in key_val_dict: key_val_dict['status'] = "active" - mock_file = "%s_%s_%s.json.gz" % (key_val_dict['data_name'], - key_val_dict['data_version'], - key_val_dict['status']) + mock_file = "%s_%s_%s.json%s" % (key_val_dict['data_name'], + key_val_dict['data_version'], + key_val_dict['status'], + path_suffix) json_file_path = os.path.join(testdir_path, 'mock_openml', str(data_id), mock_file) # load the file itself, to simulate a http error - json_data = json.loads(gzip.open(json_file_path, 'rb').read(). - decode('utf-8')) + json_data = json.loads(read_fn(json_file_path, 'rb'). + read().decode('utf-8')) if 'error' in json_data: raise HTTPError(url=None, code=412, msg='Simulated mock error', hdrs=None, fp=None) - return gzip.open(json_file_path, 'rb') + return read_fn(json_file_path, 'rb') def _mock_urlopen(url): if url.startswith(url_prefix_data_list): @@ -187,7 +194,7 @@ def test_fetch_openml_anneal(monkeypatch): # Not all original instances included for space reasons expected_observations = 11 expected_features = 38 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, False) fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, object, object, expect_sparse=False, @@ -203,7 +210,7 @@ def test_fetch_openml_anneal_multitarget(monkeypatch): # Not all original instances included for space reasons expected_observations = 11 expected_features = 36 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, False) fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, object, object, expect_sparse=False, From 817a3dcfbf4a0effd2d328260d9493b9b89e2f4b Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 15:31:02 -0400 Subject: [PATCH 089/138] changed abspath to realpath --- sklearn/datasets/tests/test_openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 50ea284fde1ba..bdf1b2cedeb39 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -78,7 +78,7 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): - testdir_path = os.path.dirname(os.path.realpath(__file__)) + testdir_path = os.path.dirname(os.path.abspath(__file__)) url_prefix_data_description = "https://openml.org/api/v1/json/data/" url_prefix_data_features = "https://openml.org/api/v1/json/data/features/" url_prefix_download_data = "https://openml.org/data/v1/" From 25f9fce632c12a60e6cdca8794c20f761630879d Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 20 Jul 2018 15:40:20 -0400 Subject: [PATCH 090/138] appveyor: added debug info --- .../tests/mock_openml/2/anneal_1_active.json | 43 --- .../mock_openml/2/anneal_1_active.json.gz | Bin 0 -> 312 bytes .../mock_openml/2/anneal_None_active.json | 43 --- .../mock_openml/2/anneal_None_active.json.gz | Bin 0 -> 315 bytes .../datasets/tests/mock_openml/2/data.arff | 172 ---------- .../datasets/tests/mock_openml/2/data.arff.gz | Bin 0 -> 1841 bytes .../tests/mock_openml/2/data_description.json | 19 -- .../mock_openml/2/data_description.json.gz | Bin 0 -> 1362 bytes .../tests/mock_openml/2/data_features.json | 317 ------------------ .../tests/mock_openml/2/data_features.json.gz | Bin 0 -> 666 bytes sklearn/datasets/tests/test_openml.py | 30 +- 11 files changed, 23 insertions(+), 601 deletions(-) delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1_active.json create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_None_active.json create mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data.arff create mode 100644 sklearn/datasets/tests/mock_openml/2/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data_description.json create mode 100644 sklearn/datasets/tests/mock_openml/2/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data_features.json create mode 100644 sklearn/datasets/tests/mock_openml/2/data_features.json.gz diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json deleted file mode 100644 index 1f8b45b70ebf3..0000000000000 --- a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "data": { - "dataset": [{ - "did": 2, - "name": "anneal", - "version": 1, - "status": "active", - "format": "ARFF", - "file_id": 1666876, - "quality": [{ - "name": "MajorityClassSize", - "value": "684.0" - }, { - "name": "MaxNominalAttDistinctValues", - "value": "7.0" - }, { - "name": "MinorityClassSize", - "value": "8.0" - }, { - "name": "NumberOfClasses", - "value": "5.0" - }, { - "name": "NumberOfFeatures", - "value": "39.0" - }, { - "name": "NumberOfInstances", - "value": "898.0" - }, { - "name": "NumberOfInstancesWithMissingValues", - "value": "898.0" - }, { - "name": "NumberOfMissingValues", - "value": "22175.0" - }, { - "name": "NumberOfNumericFeatures", - "value": "6.0" - }, { - "name": "NumberOfSymbolicFeatures", - "value": "33.0" - }] - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d19e4a633740c061891efc24e7c449cf710b876f GIT binary patch literal 312 zcmV-80muFyiwFoC!BATO17U7%WnpYzF<)V0bZK^FE^2dcZUBvuK~KU!5QWe5SCBmu zV_V%8Zv@lC1DHsn2V=}o796wP#@#6qN&masF5rQd_0rw#)mHHI=IWX?W<467rN8H8 zfePe==pGHB%IUdDnlnz)PeJ9GA??l1t70ki=6coZL21*H#%$ZxE4VKFKp)(8tRi>@W3Af@Y6oXJsO^+ zzvpFv3gm?79u1+&>A6XoGfvV^LFJht?aj`sVkz|Fy3KZUz4azDVb`lWqVd?9eNgu2 zsJtVbj{P&A(l1CKGc*R(re}Ho!CfXqQJDCbVNank@7)Ra5*E8+S;`BDI6gAo0{5wd N`WIgV4X!u?000i`l==Vw literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff b/sklearn/datasets/tests/mock_openml/2/data.arff deleted file mode 100644 index 2f8010c3798cc..0000000000000 --- a/sklearn/datasets/tests/mock_openml/2/data.arff +++ /dev/null @@ -1,172 +0,0 @@ -% 1. Title of Database: Annealing Data -% -% 2. Source Information: donated by David Sterling and Wray Buntine. -% -% 3. Past Usage: unknown -% -% 4. Relevant Information: -% -- Explanation: I suspect this was left by Ross Quinlan in 1987 at the -% 4th Machine Learning Workshop. I'd have to check with Jeff Schlimmer -% to double check this. -% -% 5. Number of Instances: 798 -% -% 6. Number of Attributes: 38 -% -- 6 continuously-valued -% -- 3 integer-valued -% -- 29 nominal-valued -% -% 7. Attribute Information: -% 1. family: --,GB,GK,GS,TN,ZA,ZF,ZH,ZM,ZS -% 2. product-type: C, H, G -% 3. steel: -,R,A,U,K,M,S,W,V -% 4. carbon: continuous -% 5. hardness: continuous -% 6. temper_rolling: -,T -% 7. condition: -,S,A,X -% 8. formability: -,1,2,3,4,5 -% 9. strength: continuous -% 10. non-ageing: -,N -% 11. surface-finish: P,M,- -% 12. surface-quality: -,D,E,F,G -% 13. enamelability: -,1,2,3,4,5 -% 14. bc: Y,- -% 15. bf: Y,- -% 16. bt: Y,- -% 17. bw/me: B,M,- -% 18. bl: Y,- -% 19. m: Y,- -% 20. chrom: C,- -% 21. phos: P,- -% 22. cbond: Y,- -% 23. marvi: Y,- -% 24. exptl: Y,- -% 25. ferro: Y,- -% 26. corr: Y,- -% 27. blue/bright/varn/clean: B,R,V,C,- -% 28. lustre: Y,- -% 29. jurofm: Y,- -% 30. s: Y,- -% 31. p: Y,- -% 32. shape: COIL, SHEET -% 33. thick: continuous -% 34. width: continuous -% 35. len: continuous -% 36. oil: -,Y,N -% 37. bore: 0000,0500,0600,0760 -% 38. packing: -,1,2,3 -% classes: 1,2,3,4,5,U -% -% -- The '-' values are actually 'not_applicable' values rather than -% 'missing_values' (and so can be treated as legal discrete -% values rather than as showing the absence of a discrete value). -% -% 8. Missing Attribute Values: Signified with "?" -% Attribute: Number of instances missing its value: -% 1 0 -% 2 0 -% 3 70 -% 4 0 -% 5 0 -% 6 675 -% 7 271 -% 8 283 -% 9 0 -% 10 703 -% 11 790 -% 12 217 -% 13 785 -% 14 797 -% 15 680 -% 16 736 -% 17 609 -% 18 662 -% 19 798 -% 20 775 -% 21 791 -% 22 730 -% 23 798 -% 24 796 -% 25 772 -% 26 798 -% 27 793 -% 28 753 -% 29 798 -% 30 798 -% 31 798 -% 32 0 -% 33 0 -% 34 0 -% 35 0 -% 36 740 -% 37 0 -% 38 789 -% 39 0 -% -% 9. Distribution of Classes -% Class Name: Number of Instances: -% 1 8 -% 2 88 -% 3 608 -% 4 0 -% 5 60 -% U 34 -% --- -% 798 -% -@relation anneal.ORIG -@attribute 'family' { GB , GK , GS , TN , ZA , ZF , ZH , ZM , ZS } -@attribute 'product-type' { C , H , G } -@attribute 'steel' { R , A , U , K , M , S , W , V } -@attribute 'carbon' real -@attribute 'hardness' real -@attribute 'temper_rolling' { T } -@attribute 'condition' { S , A , X } -@attribute 'formability' { 1 , 2 , 3 , 4 , 5 } -@attribute 'strength' real -@attribute 'non-ageing' { N } -@attribute 'surface-finish' { P , M } -@attribute 'surface-quality' { D , E , F , G } -@attribute 'enamelability' { 1 , 2 , 3 , 4 , 5 } -@attribute 'bc' { Y } -@attribute 'bf' { Y } -@attribute 'bt' { Y } -@attribute 'bw%2Fme' { B , M } -@attribute 'bl' { Y } -@attribute 'm' { Y } -@attribute 'chrom' { C } -@attribute 'phos' { P } -@attribute 'cbond' { Y } -@attribute 'marvi' { Y } -@attribute 'exptl' { Y } -@attribute 'ferro' { Y } -@attribute 'corr' { Y } -@attribute 'blue%2Fbright%2Fvarn%2Fclean' { B , R , V , C } -@attribute 'lustre' { Y } -@attribute 'jurofm' { Y } -@attribute 's' { Y } -@attribute 'p' { Y } -@attribute 'shape' { COIL , SHEET } -@attribute 'thick' real -@attribute 'width' real -@attribute 'len' real -@attribute 'oil' { Y , N } -@attribute 'bore' { 0 , 500 , 600 , 760 } -@attribute 'packing' { 1 , 2 , 3 } -@attribute 'class' { 1 , 2 , 3 , 4 , 5 , U } -@data -% -% instances from file: anneal-train.arff -% -?,C,A,8,0,?,S,?,0,?,?,G,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,0.7,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.2,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,Y,?,B,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.7,1300,762,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,M,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,2.801,385.1,0,?,0,?,3 -?,C,A,0,60,T,?,?,0,?,?,G,?,?,?,?,B,Y,?,?,?,Y,?,?,?,?,?,?,?,?,?,SHEET,0.801,255,269,?,0,?,3 -?,C,A,0,45,?,S,?,0,?,?,D,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.6,610,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,Y,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,0.699,610,4880,Y,0,?,3 -?,C,A,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,3.3,152,0,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,Y,?,?,?,COIL,0.699,1320,0,?,0,?,3 -?,C,A,0,0,?,S,3,0,N,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,SHEET,1,1320,762,?,0,?,3 -?,C,R,0,0,?,S,2,0,?,?,E,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,COIL,1.2,610,0,?,0,?,3 -% JvR: Rest of dataset truncated for space reasons. diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff.gz b/sklearn/datasets/tests/mock_openml/2/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..cdf3254add760d126b36ffa0e1d1a8b571d29daa GIT binary patch literal 1841 zcmV-12hR8(iwFoC!BATO17u-zVJ=~EW@Z4bSle>jI1+u&S9DEPO1o7c!;3^pdhz%k zPsX0CWG7?4q(BO^xTZ)g0ovo*+JE21MHETFlS%C|CS-RXG`bHO=vLl?@4{^^3I&7lDSizoYDSE4*3LnRT^FOu) zEzQzbz#G10sQ|IgIlNE~14QvC<_I z@x+CjW|Od5l6+NiLCci!ImEN621H%Ju@H5hG(sZ6X&ZS2X(efFs)iS@&ND3{9|C30xWkZa)`{6&=IikOes=cjObfCQI^_d@)!| zhm_Wd-0Sw)vtU5T?wZ!Cl5swN6NC&4w%M}!TU`}0JLhuMTcbrbaKq z5L4tsa+KsnE(|FS@ku~JGA0v)n#tH|Rz8aLo38kti#t*}nEcueZR*Bok$B$J8BLj! z#Lq0dN*WAwpZ|F4E>XB=`y&dCKa6#GaqE9r(69d{3$^^x2p?d}3T_w72!YLdOF zMLHAlrWWZ;UOsGC7jV*v0m)2?H)kV>n}Kq#4UoNbT~|HCX{$x{w(E-brhjg=$X$xb zwCbw&mXWm$t)Fwd7TIEdY(-($B3l`&>&mW;WO~(g&#S#wvV{lpLsI9DYw_V3FQN}= z!Du(>Pw;?zA^SLy!J?6=Hn&+s2LIXARkpEdLu8P@$!{nbd|NBCZ%wzoojv{S>Q@5G zkLTy+IEBb0-hSy*7d1QvArktMuQ~_C20~s7R`&fl03p3qKFBAB-0zN5C<(55Q~`MS z5N{%fNDgu288lM6rRkG8o957HO`7 zTEHsjY0bpGz#STwV61L0veKatXu=uRB3X85J73THyD47C$F+8(Q!&0M%X3)fk7b_a z=!GhcKOOy~7jKcs*1odkyV3_HG{^yc&ne~ zT%RlKQ{;g<)mPH)z^gyuhU&^|YdLqwZt(J%?i9g5-YUYLJn~w_xIbfe()!0wP1z~# z`igMeURb@yaU8qCw9P-)*x)E8sQR|z{Cv)zm7)0=3fg9lml!X;&`#72hv|S-QO) z0p8_BPqAxhEvkMatCqYSn%#A?O1m@;{XRf-I$DME5fk7W;ycE7auA~KZ7n|SJ6dJw zW;nCg(kjSj#f%+hI$MQ1L)AYp5Dbkxi_93E99}HL7{FYEkm^t^nXH;piyZq(jG^V0t|1ZQR+9Y@F{#KfG}^KZpKCvzf9xo=!cS(0BNM%88Kp zli>fGXxd#r42C@HoelBx<}cXo^WbZv!%X{ecL#emJQwfbm*>SC7K{to?8!TTGl5?Z fn=(~j5V6by#~X&p>x)+ZdbkIub1`ndPU z{$3}gj!rFi)0A6gMB#*1oe})l-`nem6kDBshxiXgbM8N>Qk=@VZ^4bN@tvsd*=Fe+ z9i5jh)8^=C1P|&->7@$cjaJn06p|IZp$n11*l{C;ngdlSd^U6i7o~DSae#?BIvVTJ zFzzY7K3v{@d!0E~*wLgr=~BZovEZR#HY}M4d0I}oxtw(UtZ-6x(mk)jMe;)kAUZqi z)tq;dBLJ9i|Bo04P(Qh8p`~D}Fmt&)^pq2IpK;Je%!Q&7)^4E*1!hL)fNnzYK>nRF z2RWz8WAqFhcFs6;rQx>Hfk|pDwuJ>r&78{>l+OyT*$D`RERIT9n)#|4n4`ExP-($3 z!4>1gb5O{T9h|{;&K0&Y{G<}GwsKx%D=Qd=?m4VRQjw#3mhrsmE{ra?aRU1=T)K7x zPGbCA|iba3%>A_{TjBl|Y=q(_ti1~Od|CTJRg>9H zE6SO;omP}HS>nCI+lY(SBv8#n?i`LP=D!#>);`L|GQ4xzh|9GVWFQPr3=-vYDH77t|=c zlJP2UZ~O~9B%jD;swko?{dOC@M2aH*T^c>hU$PERM7vYsffsSN)$hQJ7F&yZ`RDB) z1jaXS-!?~TfMU8#u%|Za*P}2%O_w5V9hR3sD6QmbJD%S_sIV5lY^i{Jc|KMHud&{e z3ZRD%=^gu5>|ZBwuR)`<1!Ygw`D_kOZE2F%nr3~b$b$#epdhGH;X!Z!3yKSiNeYtz z=0!ZOnC%Xfc2imum}mXXy$0dsopIyymujvPfP-9Ei(yP_%mKWvvlw2B3KCwYJuEpW zCR0AgOp*$$Q@G=6hTq9O*k*d^6NpccG_gLL*4giQd_C?ktgD|oJ@~@s{NvSC-B%V; z({zeuKvh2Vd(klH;V-`L4@S}1s6VW6I89IQF?VHxU(IkMeb=TmSuU3$W@44gP@8#O z>flj`u!XgO_ciH8aU7qX#8}5vg+fTpY}Q05B%juGT?2Zq+h(+sZt8rgfwDj6JP)iE zbF1K+;*H5=tL$@hj$dCp)|KgMik9B$f!cKc-09=7l&y;eK+Z7jb!-)iT=iu$7V zo{N@9SOvJ!R@Eui9t&Rg=IQYi%NO=!%iPkpHd^-j-{UOYUB Uqt5=`&;6hO0e4b}%oPg&0G9@#9smFU literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/mock_openml/2/data_features.json b/sklearn/datasets/tests/mock_openml/2/data_features.json deleted file mode 100644 index b859302867253..0000000000000 --- a/sklearn/datasets/tests/mock_openml/2/data_features.json +++ /dev/null @@ -1,317 +0,0 @@ -{ - "data_features": { - "feature": [{ - "index": "0", - "name": "family", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "772" - }, { - "index": "1", - "name": "product-type", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "2", - "name": "steel", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "86" - }, { - "index": "3", - "name": "carbon", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "4", - "name": "hardness", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "5", - "name": "temper_rolling", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "761" - }, { - "index": "6", - "name": "condition", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "303" - }, { - "index": "7", - "name": "formability", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "318" - }, { - "index": "8", - "name": "strength", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "9", - "name": "non-ageing", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "793" - }, { - "index": "10", - "name": "surface-finish", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "889" - }, { - "index": "11", - "name": "surface-quality", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "244" - }, { - "index": "12", - "name": "enamelability", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "882" - }, { - "index": "13", - "name": "bc", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "897" - }, { - "index": "14", - "name": "bf", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "769" - }, { - "index": "15", - "name": "bt", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "824" - }, { - "index": "16", - "name": "bw%2Fme", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "687" - }, { - "index": "17", - "name": "bl", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "749" - }, { - "index": "18", - "name": "m", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "19", - "name": "chrom", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "872" - }, { - "index": "20", - "name": "phos", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "891" - }, { - "index": "21", - "name": "cbond", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "824" - }, { - "index": "22", - "name": "marvi", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "23", - "name": "exptl", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "896" - }, { - "index": "24", - "name": "ferro", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "868" - }, { - "index": "25", - "name": "corr", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "26", - "name": "blue%2Fbright%2Fvarn%2Fclean", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "892" - }, { - "index": "27", - "name": "lustre", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "847" - }, { - "index": "28", - "name": "jurofm", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "29", - "name": "s", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "30", - "name": "p", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "898" - }, { - "index": "31", - "name": "shape", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "32", - "name": "thick", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "33", - "name": "width", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "34", - "name": "len", - "data_type": "numeric", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "35", - "name": "oil", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "834" - }, { - "index": "36", - "name": "bore", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }, { - "index": "37", - "name": "packing", - "data_type": "nominal", - "is_target": "false", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "889" - }, { - "index": "38", - "name": "class", - "data_type": "nominal", - "is_target": "true", - "is_ignore": "false", - "is_row_identifier": "false", - "number_of_missing_values": "0" - }] - } -} \ No newline at end of file diff --git a/sklearn/datasets/tests/mock_openml/2/data_features.json.gz b/sklearn/datasets/tests/mock_openml/2/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..f3c520472f9496aec35b783a2cb48bc1d4929a36 GIT binary patch literal 666 zcmV;L0%iRliwFoC!BATO17u-zVP9rtVRUtJWpgfSb8l_{)tTFln=lZDual=(A@y!o zN^r`d573vWDrAfS@A^Oolk94hcP~j(Rhlrj&2SZrG5W_D&o?uCZZ}CIqpVsj;{7$~E|aGmkN887W^%8XT% z(CPSRksbBF3DfxidSL>>sWOfB(X>Vbe!x$z)=-7Ea%LQj@2aD;)76M1&(man==}VI z^zV`W0YWpW_;OXv&5GT!4Joo=j9OcE;)`rqy+G=fggW>|`IFON6sx^IAoab3#_Mrh zi~g@jf7EW6Ujf0|c|AKP%Cr5l9U1nb;2RSS;Yg1(LF~k`2{{g>0i3LjHIZLD75ie@ zh~h35f%aYO*K!_8q~8bsB0J6UER=*J?J< z^t^&ftg|$4}Dm!4j#MxL|&a@ z1gp6?YxwD>B2S9J>m(cvKmC;Zrx>{UeTe)*Pf-%peTtdeYJk8`e@5*;#;ytg{N$7F za|hme$&B6_OxMTx;wZt-Kgw#!uT(BdDyU)_+v!qh@-yH-q!TG7^6LblWr#J>u`rf7 zGL6tK?vT79?RO<{FW1wl7MRAdH|lLsJ;UCRz$`wQW<8xPfk|xjYP#$KQ#crgIglW7 zP;m$0z>rnc)??HTQoV6(hmu`Hfmy4pBtFp4`XfyLWBY$@H|Op7H;jwdjEEfo0BLwp Au>b%7 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index bdf1b2cedeb39..c6afbf5383391 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -15,6 +15,9 @@ from sklearn.externals.six.moves.urllib.error import HTTPError +currdir = os.path.dirname(os.path.abspath(__file__)) + + def fetch_dataset_from_openml(data_id, data_name, data_version, target_column_name, expected_observations, expected_features, @@ -78,7 +81,6 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): - testdir_path = os.path.dirname(os.path.abspath(__file__)) url_prefix_data_description = "https://openml.org/api/v1/json/data/" url_prefix_data_features = "https://openml.org/api/v1/json/data/features/" url_prefix_download_data = "https://openml.org/data/v1/" @@ -93,21 +95,21 @@ def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): def _mock_urlopen_data_description(url): assert (url.startswith(url_prefix_data_description)) - path = os.path.join(testdir_path, 'mock_openml', str(data_id), + path = os.path.join(currdir, 'mock_openml', str(data_id), 'data_description.json%s' % path_suffix) return read_fn(path, 'rb') def _mock_urlopen_data_features(url): assert (url.startswith(url_prefix_data_features)) - path = os.path.join(testdir_path, 'mock_openml', str(data_id), + path = os.path.join(currdir, 'mock_openml', str(data_id), 'data_features.json%s' % path_suffix) return read_fn(path, 'rb') def _mock_urlopen_download_data(url): assert (url.startswith(url_prefix_download_data)) - path = os.path.join(testdir_path, 'mock_openml', str(data_id), + path = os.path.join(currdir, 'mock_openml', str(data_id), 'data.arff%s' % path_suffix) return read_fn(path, 'rb') @@ -127,7 +129,7 @@ def _mock_urlopen_data_list(url): key_val_dict['data_version'], key_val_dict['status'], path_suffix) - json_file_path = os.path.join(testdir_path, 'mock_openml', + json_file_path = os.path.join(currdir, 'mock_openml', str(data_id), mock_file) # load the file itself, to simulate a http error json_data = json.loads(read_fn(json_file_path, 'rb'). @@ -194,7 +196,7 @@ def test_fetch_openml_anneal(monkeypatch): # Not all original instances included for space reasons expected_observations = 11 expected_features = 38 - _monkey_patch_webbased_functions(monkeypatch, data_id, False) + _monkey_patch_webbased_functions(monkeypatch, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, object, object, expect_sparse=False, @@ -210,7 +212,7 @@ def test_fetch_openml_anneal_multitarget(monkeypatch): # Not all original instances included for space reasons expected_observations = 11 expected_features = 36 - _monkey_patch_webbased_functions(monkeypatch, data_id, False) + _monkey_patch_webbased_functions(monkeypatch, data_id) fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, object, object, expect_sparse=False, @@ -327,6 +329,20 @@ def test_raises_illegal_multitarget(monkeypatch): target_column_name=targets, cache=False) +def test_mocked_testfiles_exist(): + data_ids = [2, 61, 292, 561, 40675] + expected_files = ['data.arff.gz', 'data_description.json.gz', + 'data_features.json.gz'] + assert os.path.isdir(currdir) + assert os.path.isdir(os.path.join(currdir, 'mock_openml')) + for data_id in data_ids: + test_dir = os.path.join(currdir, 'mock_openml', str(data_id)) + assert os.path.isdir(test_dir) + assert len(os.listdir(test_dir)) >= 5 + for expected_file in expected_files: + assert os.path.isfile(os.path.join(test_dir, expected_file)) + + def test_warn_ignore_attribute(monkeypatch): data_id = 40966 expected_row_id_msg = "target_column_name={} has flag is_row_identifier." From 3f32a9319db8d0403f946ff0f1098b70477d6126 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 15:39:16 -0400 Subject: [PATCH 091/138] added arff.gz and json.gz to manifest.in --- MANIFEST.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index ed0ca0e87274e..db605f55f748c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,7 +2,7 @@ include *.rst recursive-include doc * recursive-include examples * recursive-include sklearn *.c *.h *.pyx *.pxd *.pxi -recursive-include sklearn/datasets *.csv *.csv.gz *.rst *.jpg *.txt +recursive-include sklearn/datasets *.csv *.csv.gz *.rst *.jpg *.txt *.arff.gz *.json.gz include COPYING include AUTHORS.rst include README.rst From 381fd4556f37afd97f0ad7ad75192c13b44754f7 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 16:06:24 -0400 Subject: [PATCH 092/138] moved openml test files to data directory --- .../tests/data/openml/2/anneal_1_active.json.gz | Bin 0 -> 312 bytes .../data/openml/2/anneal_None_active.json.gz | Bin 0 -> 315 bytes .../datasets/tests/data/openml/2/data.arff.gz | Bin 0 -> 1841 bytes .../tests/data/openml/2/data_description.json.gz | Bin 0 -> 1362 bytes .../tests/data/openml/2/data_features.json.gz | Bin 0 -> 666 bytes .../data/openml/292/australian_1_active.json.gz | Bin 0 -> 99 bytes .../openml/292/australian_1_deactivated.json.gz | Bin 0 -> 325 bytes .../openml/292/australian_None_active.json.gz | Bin 0 -> 376 bytes .../datasets/tests/data/openml/292/data.arff.gz | Bin 0 -> 2532 bytes .../data/openml/292/data_description.json.gz | Bin 0 -> 547 bytes .../tests/data/openml/292/data_features.json.gz | Bin 0 -> 286 bytes .../tests/data/openml/40675/data.arff.gz | Bin 0 -> 3000 bytes .../data/openml/40675/data_description.json.gz | Bin 0 -> 323 bytes .../data/openml/40675/data_features.json.gz | Bin 0 -> 288 bytes .../data/openml/40675/glass2_1_active.json.gz | Bin 0 -> 85 bytes .../openml/40675/glass2_1_deactivated.json.gz | Bin 0 -> 296 bytes .../data/openml/40675/glass2_None_active.json.gz | Bin 0 -> 88 bytes .../tests/data/openml/40966/data.arff.gz | Bin 0 -> 6471 bytes .../data/openml/40966/data_description.json.gz | Bin 0 -> 1659 bytes .../data/openml/40966/data_features.json.gz | Bin 0 -> 920 bytes .../openml/40966/miceprotein_4_active.json.gz | Bin 0 -> 308 bytes .../openml/40966/miceprotein_None_active.json.gz | Bin 0 -> 311 bytes .../tests/data/openml/561/cpu_1_active.json.gz | Bin 0 -> 299 bytes .../data/openml/561/cpu_None_active.json.gz | Bin 0 -> 348 bytes .../datasets/tests/data/openml/561/data.arff.gz | Bin 0 -> 3303 bytes .../data/openml/561/data_description.json.gz | Bin 0 -> 1798 bytes .../tests/data/openml/561/data_features.json.gz | Bin 0 -> 262 bytes .../datasets/tests/data/openml/61/data.arff.gz | Bin 0 -> 2342 bytes .../data/openml/61/data_description.json.gz | Bin 0 -> 898 bytes .../tests/data/openml/61/data_features.json.gz | Bin 0 -> 210 bytes .../tests/data/openml/61/iris_1_active.json.gz | Bin 0 -> 291 bytes .../data/openml/61/iris_None_active.json.gz | Bin 0 -> 333 bytes sklearn/datasets/tests/test_openml.py | 12 ++++++------ 33 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 sklearn/datasets/tests/data/openml/2/anneal_1_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/2/anneal_None_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/2/data.arff.gz create mode 100644 sklearn/datasets/tests/data/openml/2/data_description.json.gz create mode 100644 sklearn/datasets/tests/data/openml/2/data_features.json.gz create mode 100644 sklearn/datasets/tests/data/openml/292/australian_1_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/292/australian_1_deactivated.json.gz create mode 100644 sklearn/datasets/tests/data/openml/292/australian_None_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/292/data.arff.gz create mode 100644 sklearn/datasets/tests/data/openml/292/data_description.json.gz create mode 100644 sklearn/datasets/tests/data/openml/292/data_features.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40675/data.arff.gz create mode 100644 sklearn/datasets/tests/data/openml/40675/data_description.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40675/data_features.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40675/glass2_1_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40675/glass2_1_deactivated.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40675/glass2_None_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40966/data.arff.gz create mode 100644 sklearn/datasets/tests/data/openml/40966/data_description.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40966/data_features.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40966/miceprotein_4_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40966/miceprotein_None_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/561/cpu_1_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/561/cpu_None_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/561/data.arff.gz create mode 100644 sklearn/datasets/tests/data/openml/561/data_description.json.gz create mode 100644 sklearn/datasets/tests/data/openml/561/data_features.json.gz create mode 100644 sklearn/datasets/tests/data/openml/61/data.arff.gz create mode 100644 sklearn/datasets/tests/data/openml/61/data_description.json.gz create mode 100644 sklearn/datasets/tests/data/openml/61/data_features.json.gz create mode 100644 sklearn/datasets/tests/data/openml/61/iris_1_active.json.gz create mode 100644 sklearn/datasets/tests/data/openml/61/iris_None_active.json.gz diff --git a/sklearn/datasets/tests/data/openml/2/anneal_1_active.json.gz b/sklearn/datasets/tests/data/openml/2/anneal_1_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d19e4a633740c061891efc24e7c449cf710b876f GIT binary patch literal 312 zcmV-80muFyiwFoC!BATO17U7%WnpYzF<)V0bZK^FE^2dcZUBvuK~KU!5QWe5SCBmu zV_V%8Zv@lC1DHsn2V=}o796wP#@#6qN&masF5rQd_0rw#)mHHI=IWX?W<467rN8H8 zfePe==pGHB%IUdDnlnz)PeJ9GA??l1t70ki=6coZL21*H#%$ZxE4VKFKp)(8tRi>@W3Af@Y6oXJsO^+ zzvpFv3gm?79u1+&>A6XoGfvV^LFJht?aj`sVkz|Fy3KZUz4azDVb`lWqVd?9eNgu2 zsJtVbj{P&A(l1CKGc*R(re}Ho!CfXqQJDCbVNank@7)Ra5*E8+S;`BDI6gAo0{5wd N`WIgV4X!u?000i`l==Vw literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/2/data.arff.gz b/sklearn/datasets/tests/data/openml/2/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..cdf3254add760d126b36ffa0e1d1a8b571d29daa GIT binary patch literal 1841 zcmV-12hR8(iwFoC!BATO17u-zVJ=~EW@Z4bSle>jI1+u&S9DEPO1o7c!;3^pdhz%k zPsX0CWG7?4q(BO^xTZ)g0ovo*+JE21MHETFlS%C|CS-RXG`bHO=vLl?@4{^^3I&7lDSizoYDSE4*3LnRT^FOu) zEzQzbz#G10sQ|IgIlNE~14QvC<_I z@x+CjW|Od5l6+NiLCci!ImEN621H%Ju@H5hG(sZ6X&ZS2X(efFs)iS@&ND3{9|C30xWkZa)`{6&=IikOes=cjObfCQI^_d@)!| zhm_Wd-0Sw)vtU5T?wZ!Cl5swN6NC&4w%M}!TU`}0JLhuMTcbrbaKq z5L4tsa+KsnE(|FS@ku~JGA0v)n#tH|Rz8aLo38kti#t*}nEcueZR*Bok$B$J8BLj! z#Lq0dN*WAwpZ|F4E>XB=`y&dCKa6#GaqE9r(69d{3$^^x2p?d}3T_w72!YLdOF zMLHAlrWWZ;UOsGC7jV*v0m)2?H)kV>n}Kq#4UoNbT~|HCX{$x{w(E-brhjg=$X$xb zwCbw&mXWm$t)Fwd7TIEdY(-($B3l`&>&mW;WO~(g&#S#wvV{lpLsI9DYw_V3FQN}= z!Du(>Pw;?zA^SLy!J?6=Hn&+s2LIXARkpEdLu8P@$!{nbd|NBCZ%wzoojv{S>Q@5G zkLTy+IEBb0-hSy*7d1QvArktMuQ~_C20~s7R`&fl03p3qKFBAB-0zN5C<(55Q~`MS z5N{%fNDgu288lM6rRkG8o957HO`7 zTEHsjY0bpGz#STwV61L0veKatXu=uRB3X85J73THyD47C$F+8(Q!&0M%X3)fk7b_a z=!GhcKOOy~7jKcs*1odkyV3_HG{^yc&ne~ zT%RlKQ{;g<)mPH)z^gyuhU&^|YdLqwZt(J%?i9g5-YUYLJn~w_xIbfe()!0wP1z~# z`igMeURb@yaU8qCw9P-)*x)E8sQR|z{Cv)zm7)0=3fg9lml!X;&`#72hv|S-QO) z0p8_BPqAxhEvkMatCqYSn%#A?O1m@;{XRf-I$DME5fk7W;ycE7auA~KZ7n|SJ6dJw zW;nCg(kjSj#f%+hI$MQ1L)AYp5Dbkxi_93E99}HL7{FYEkm^t^nXH;piyZq(jG^V0t|1ZQR+9Y@F{#KfG}^KZpKCvzf9xo=!cS(0BNM%88Kp zli>fGXxd#r42C@HoelBx<}cXo^WbZv!%X{ecL#emJQwfbm*>SC7K{to?8!TTGl5?Z fn=(~j5V6by#~X&p>x)+ZdbkIub1`ndPU z{$3}gj!rFi)0A6gMB#*1oe})l-`nem6kDBshxiXgbM8N>Qk=@VZ^4bN@tvsd*=Fe+ z9i5jh)8^=C1P|&->7@$cjaJn06p|IZp$n11*l{C;ngdlSd^U6i7o~DSae#?BIvVTJ zFzzY7K3v{@d!0E~*wLgr=~BZovEZR#HY}M4d0I}oxtw(UtZ-6x(mk)jMe;)kAUZqi z)tq;dBLJ9i|Bo04P(Qh8p`~D}Fmt&)^pq2IpK;Je%!Q&7)^4E*1!hL)fNnzYK>nRF z2RWz8WAqFhcFs6;rQx>Hfk|pDwuJ>r&78{>l+OyT*$D`RERIT9n)#|4n4`ExP-($3 z!4>1gb5O{T9h|{;&K0&Y{G<}GwsKx%D=Qd=?m4VRQjw#3mhrsmE{ra?aRU1=T)K7x zPGbCA|iba3%>A_{TjBl|Y=q(_ti1~Od|CTJRg>9H zE6SO;omP}HS>nCI+lY(SBv8#n?i`LP=D!#>);`L|GQ4xzh|9GVWFQPr3=-vYDH77t|=c zlJP2UZ~O~9B%jD;swko?{dOC@M2aH*T^c>hU$PERM7vYsffsSN)$hQJ7F&yZ`RDB) z1jaXS-!?~TfMU8#u%|Za*P}2%O_w5V9hR3sD6QmbJD%S_sIV5lY^i{Jc|KMHud&{e z3ZRD%=^gu5>|ZBwuR)`<1!Ygw`D_kOZE2F%nr3~b$b$#epdhGH;X!Z!3yKSiNeYtz z=0!ZOnC%Xfc2imum}mXXy$0dsopIyymujvPfP-9Ei(yP_%mKWvvlw2B3KCwYJuEpW zCR0AgOp*$$Q@G=6hTq9O*k*d^6NpccG_gLL*4giQd_C?ktgD|oJ@~@s{NvSC-B%V; z({zeuKvh2Vd(klH;V-`L4@S}1s6VW6I89IQF?VHxU(IkMeb=TmSuU3$W@44gP@8#O z>flj`u!XgO_ciH8aU7qX#8}5vg+fTpY}Q05B%juGT?2Zq+h(+sZt8rgfwDj6JP)iE zbF1K+;*H5=tL$@hj$dCp)|KgMik9B$f!cKc-09=7l&y;eK+Z7jb!-)iT=iu$7V zo{N@9SOvJ!R@Eui9t&Rg=IQYi%NO=!%iPkpHd^-j-{UOYUB Uqt5=`&;6hO0e4b}%oPg&0G9@#9smFU literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/2/data_features.json.gz b/sklearn/datasets/tests/data/openml/2/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..f3c520472f9496aec35b783a2cb48bc1d4929a36 GIT binary patch literal 666 zcmV;L0%iRliwFoC!BATO17u-zVP9rtVRUtJWpgfSb8l_{)tTFln=lZDual=(A@y!o zN^r`d573vWDrAfS@A^Oolk94hcP~j(Rhlrj&2SZrG5W_D&o?uCZZ}CIqpVsj;{7$~E|aGmkN887W^%8XT% z(CPSRksbBF3DfxidSL>>sWOfB(X>Vbe!x$z)=-7Ea%LQj@2aD;)76M1&(man==}VI z^zV`W0YWpW_;OXv&5GT!4Joo=j9OcE;)`rqy+G=fggW>|`IFON6sx^IAoab3#_Mrh zi~g@jf7EW6Ujf0|c|AKP%Cr5l9U1nb;2RSS;Yg1(LF~k`2{{g>0i3LjHIZLD75ie@ zh~h35f%aYO*K!_8q~8bsB0J6UER=*J?J< z^t^&ftg|$4}Dm!4j#MxL|&a@ z1gp6?YxwD>B2S9J>m(cvKmC;Zrx>{UeTe)*Pf-%peTtdeYJk8`e@5*;#;ytg{N$7F za|hme$&B6_OxMTx;wZt-Kgw#!uT(BdDyU)_+v!qh@-yH-q!TG7^6LblWr#J>u`rf7 zGL6tK?vT79?RO<{FW1wl7MRAdH|lLsJ;UCRz$`wQW<8xPfk|xjYP#$KQ#crgIglW7 zP;m$0z>rnc)??HTQoV6(hmu`Hfmy4pBtFp4`XfyLWBY$@H|Op7H;jwdjEEfo0BLwp Au>b%7 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/292/australian_1_active.json.gz b/sklearn/datasets/tests/data/openml/292/australian_1_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..0e2c4395f1c234118fd039f2d0598f2ab41ea61b GIT binary patch literal 99 zcmV-p0G$6HiwFo_u}fP317US@baG*AX<=?(F<)V0bZK^FE^2dcZUC$1;#5j4D#|ZX zvQnt#;^b6H&QD1NvXzX@jg)ji0=cQh#fj-)F~59;qSWHjoRVTCF3wu6S^#i2H9kE6 F000vLD#!o; literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/292/australian_1_deactivated.json.gz b/sklearn/datasets/tests/data/openml/292/australian_1_deactivated.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..5ee200d7c056b7e92c841a8d8c6404f4198a2c50 GIT binary patch literal 325 zcmV-L0lNMliwFo%m`hs#17US@baG*AX<=?(F<)e5VPkY@c42g7WG-rRZ*BmkkwH&` zKoEt`A)xGc0t{@gMZ#hFUou+&CR-@ z|CHO3v9zZ)N6_(UFMF-+kJ9N8_$>5)Pv0Xy&yfiAQ^)!G&Hl^Vw=|e`Ut`*9k!mcEgn7hsJ!YEM~ZwmL<0Z-S2~-{ literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/292/australian_None_active.json.gz b/sklearn/datasets/tests/data/openml/292/australian_None_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..08d319727fb520503628d3c6307955884517a066 GIT binary patch literal 376 zcmV-;0f+t{iwFp@nM+#$17US@baG*AX<=?(PH%2yUtwc(X?A5UYIARH0Hu&!Yr-%T zhOh0f2)WvzNUPIX?_?l2a07+yVhoAx(VmeeE=dbc{O>z$b%UwvV7*Ar*YlpY*?EjU zzKC^}fpUDv_iml3Q>vJVFA}Z zg-n|SObKla6r{|uTsquHV6omH*f#gQ7Ego|v~%aR>exbQ;ib%}fC(kE)UQ${GAR9x za_fwcC={<72M^S{sSDN#m)ml-c669qX_JZS7e}-4_*g^CrxkAd z<>q_;RJ>_Jtve~Ko#V$ro_q+IR}e64)6eMADO!ta{ZtB^$~BAqm!}&H#us0s->5L(W=k!9 Wk%*2GuU>uZz5OR-F&Y7H0{{RFM6fFW literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/292/data.arff.gz b/sklearn/datasets/tests/data/openml/292/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..6821829e1e43a250e8dee84c85287a55a2291ac0 GIT binary patch literal 2532 zcmVT;|acZ3%k5;(l0M(_}cEkn$I=cSEo-kJHsY5`}cqU$?E@osZYD7`p}%&51*Un z%bVA)UtV5r)A!QX&d*P`5A~0*-7lxzr`@62w_-lS&L8Xgzz$K~e)l^Fxj*hNPluNs z9HqLyKb{_Thfl0ICdrS-{r>n87fu)0^-VnABdfaKu;ZcCs;PE|GrX(WbG5(J><3so zH`SqGk9E~tPW6x1YzKPn_Inl$2fP1XpN_0LJb;+XnVssV<1?J)^Js@xMnxvPrUf6V28^SM8o}PRg$ZUT-D^NAy+NA>c~}3 zt_E^daC({6PSENJT0b!;c=h(DcX#iu{@`H7YbF@{k?e-wIvuoA?wYCiPI#fEx7WKJ69S9lMRw&LV9F-+%+e7tT2Q=OFtg3s=I)pgQ3u zisiT5*&r47Q?bE&ErlqFy~%RDZUqZUq>(D{;5(7t!R|VJx}PXELqIN_EJ5!LAc(+8h$yr7mOTDJ#(*> z+E_xc@sj&sC)N%+yE#~|3C)9YS}WU~A;305tGTbiMEM9YCas?zA!sgxH`61`{hjrP z14}LX2vgDMs?$G-c5deE9*YoFT484;wHLB?w6R@wE#gQ3+$;*c zndz#noZEMdVAf^1#fn}uG%lxu%B~DzUTY&n@7q*OWmtxjwv_A5wOmM4)dW@6!0KFa zQ3~@V^KY!|IK)Gc6q>6L-QPPuBxIRo`6%LqH^CBR#-%Lt(<8Vc3?RNq`ebZZDW|}? z;EhcY80*|X-g*m6qQ&D0HpRbhh9l}mfVdVWsL-<(=R3t$k<^>+;4}Rl7dj^1D8jS# zt%6!llo_A~Lb^V~1tt?kWP>ULKU+QmN_1q2K*3F{7pY8lM;7bg3XAa+n_8Ciu(Gmbe;G4N2LV`x!!PG*D!aN}89 zo;t-1p{G<#zV)hlP4z6avqgbhi~^o}=Ll*+x*B0x&`MJERYJ$2%oN*G&X>ZC=N_Xs z{&Lz`js5KiA0TK$EGL(r-~}+0V{#5 zmIrWk9tJ_D+=ZB!Hl@SNZC%$iGU9rk$t{5PQ5EbK^qSDqW$^F|WHAqkbEGdzOA{rO`EWB}%Xc4UK8W;POU=oOKjPhWJsLRr=8zOu%bp0Ol-cpmEsECsy zgK0noZL94!=h)DeN!*tCDSV6uy(1{i#BHrNLxaa)XS{LL9z{h(9=es)E;4s&>N`|4 zGegf*m!U(KnLV%dNNE7JURvDP&6C3Bg3&&U%XrQRHGa6J{Y%#wL&;vC$gO$%+JOcR<&Z+&T`U_2 zur-*yi9N69fzEK5C864YA$;@$9fq{5R2Nf*x2G^UeAhcr{k6VS3 zzAjJPm*WfH?FB*Qu@sRy>kSNcbF&a1a4W_%5Akuo>ElR?$+SKjz{73y{M{?|_va69 u*oXSuu;XKT1UNnVdb%9$tMnZ5@f07py|3A+uFl89`S$-Y(|E+*EC2xdp!${o literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/292/data_description.json.gz b/sklearn/datasets/tests/data/openml/292/data_description.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..888140f92b36025bdaf00eba9eeb917fd9c3964e GIT binary patch literal 547 zcmV+;0^I!{iwFp5lS^9w17u-zVP9lrb7OL8aCB*JZZ2wbZ*BlpQca87Fc3W_ze2b- zvxzOmP7~j9StzuyG~0zz6(h@XELN6`J`%Re{`X2&S|^~xo0+GXHy`iIMbZ*WYQt>Z zGD9^VEmtzB!25EsNOV&heyg9yn0|3i3Ju0Uu3*jH~RjP{wD}ZuXtRP&$B66MtBZdLW?L-VtET4OB zfPc1Upd*8F2F&U}=*_qG05r3jvomXNvvyhy(?=1N7@v8K|nF^q*Bh;_JcAsDEjuGp0V89{{stZ+Yn9*@0+OYcY{qZq| zsP=57r`Y|>u5l#YJYJcG1j$jcd(o>%4fVO zW?bCxOElxp$?tg9-0+4AZr_50@n$f_@57nkZ5i<^IQs#&F*LMgO?yUPjT-`?fn~Wb lXonao_C?u1RKVSKvukKcQMrN1a`CbJ_zTS2bE$~~005Kz4Z;8b literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/292/data_features.json.gz b/sklearn/datasets/tests/data/openml/292/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..5a7138dd9d6a105b56cfc180f0d6af5fb75abf87 GIT binary patch literal 286 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 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/40675/data_description.json.gz b/sklearn/datasets/tests/data/openml/40675/data_description.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..42b876f0a4723653c6cb004a8e54e432ec995450 GIT binary patch literal 323 zcmV-J0lfYniwFovwM$z717u-zVP9lrb7OL8aCB*JZZ2wbZ*Blxkh^ZfFbqX!`zs2~ zO)Oh}Al|y<1B#9Y3|fywi2Q&=$0&mQd!@)7+KoEABJbrRO^5)5-bw6*blmC%^*oXG z?U5!4(ZW}xq;*q~_W&jsWk44L&J~f}rFHQS$s_qYX%`=s(G0P#W;+6g*2m}h9ND^< z8AR{hycQHRZw|CP(E2Mc+MKl&i#nsZocK$#tb>2;->nJginzG8%erjaw&T3WX*9># zUb-yA?6Q0At9hHkt}ZK2byZZf%c8?0SfzG{+Q@!SA4R{(6s!h&1bgu(14OHbHCpCj z$bJ&-^q`H#@Bcm>0N Vsv5-Kz-mHqY6ejN{RfWc3?}ZQ-Nz_Uawe>Q`X}pj8t4N^kVP5C_JwrDI p8JU>}T?#zqtE=bd!~XH_C(*8;Ztr5RuBlnsj3RkYqxBgW7yu)}A3gv8 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/40675/glass2_1_deactivated.json.gz b/sklearn/datasets/tests/data/openml/40675/glass2_1_deactivated.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..2f48ea985b4c919414b26c75e4f3a909fa37554a GIT binary patch literal 296 zcmV+@0oVQ?iwFp(w@X_917~bub8|9ZF<)e5VPkY@c42g7WG-rRZ*BmkkikmBKoEw{ z%~O;;7fGT?tTzz?9;#qL4dS(d7oRh*y4usY03SL>91(56*kUg!Kh sLpKE(nVAP&3OwbjtLNv#{_*c8(XOCw?_#g6sae^KB6&}v^%)o#0FuWbod5s; literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/40966/data.arff.gz b/sklearn/datasets/tests/data/openml/40966/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..43ec977bf67acca1421e65a62f1c6b699de94ebc GIT binary patch literal 6471 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 JkqQ#he*izqRiOX? literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/40966/data_description.json.gz b/sklearn/datasets/tests/data/openml/40966/data_description.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..02b25d717f925451397d3e7903768be470cc2f95 GIT binary patch literal 1659 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 G0ssKk`;FQF literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/40966/miceprotein_None_active.json.gz b/sklearn/datasets/tests/data/openml/40966/miceprotein_None_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..712545f0b72d59e3cf5b8d2338bfe45b4cedadd6 GIT binary patch literal 311 zcmV-70m%LziwFpnyGvUD18r$zWpHwDbY*F7UrujsWnW=qbZK^FE^2dcZUBXmO-lnY z5Qfj)Ur}-{l3m>|Zz3#ssEP$Wh?I0Y)sbw1Nw!eS{&$m2E#h{YOOkmr&pVUJKAMm< zGmKnM_tC_kH5ePdy4VW1w!sxGvuxH2f;C_jGRGPol{A2Y_?s;#jZ(ODFKEL|t6egy z4Q}C(w~?x0t^~Pxs;XZRIV}5Hab6}xmQb&MwTz?L9UJ=70Q;26Ufpu0^#Z>S_O=hk z+dd;s=>;WD>}J#dG>Q;S(^2}qZC0QjHa!h`z!pKW0y`UZ3QdCSov@P?^$9qp#rTs4 z_zRkkIckmK{n<$X+(V66V&|-IWn#k=L? z<#W*9z_}L}m)%Y&6-e$i%Re29&XOC8T6wc7u>|C7D1w}D$*a1BHWETG8$D#%#zeti zV~5_LKaA#=1A(;K&hXcD3?JI~UpE4*o#IcG?S}y2%8Ik@dCG!UblN-c_e4unAVx&D zXbDwLj{&qhG5xeT2G#L1Oq`r?bH6Czn!X318TacoHSE=1^iKJ=QF#s9ONWQkPe|`$ xv=-G{!}^-Hw+TCy_g`)>Z(PP;Z^CpXXIlIdv3-h{BpyXl`~qE$Tz4-6001vRkRt#9 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/561/cpu_None_active.json.gz b/sklearn/datasets/tests/data/openml/561/cpu_None_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..4436afa6bc760a05f49a8702dc24171e37fd0f65 GIT binary patch literal 348 zcmV-i0i*sOiwFn^mrGj!17mP?UrujsWnW=qbZK^FE^2dcZUF65O;3YB6g-z-(d@Yz zU;~J^MnmGEHL-~vjA^!XtIsTp?nh&7`0p+sZDR^TiisC5EHk{B_wtt6S_8BsilEEk z)*6)Wk}3lqb8HA$8sPcPsDPX#)L<09X;d<6DkP-bkX4CPL}{59kyyc+R&}dXBqTRR zg1QwgG+3fW@TSne1`)+1^@sugrxES literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/561/data.arff.gz b/sklearn/datasets/tests/data/openml/561/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..eeb088c224a01f55aacecc6ffec3b9fea8470b0f GIT binary patch literal 3303 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 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/561/data_features.json.gz b/sklearn/datasets/tests/data/openml/561/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d159bbd8570d83e743701614d788c87895956a05 GIT binary patch literal 262 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 literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/61/data_features.json.gz b/sklearn/datasets/tests/data/openml/61/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..c436e322fc7d2a5b4ce9e4c462436e5dc588985a GIT binary patch literal 210 zcmV;@04@I?iwFn~c0*eL17u-zVP9rtVRUtJWpgfSb8l_{&Ct0D!!Qhh;djxTq1TjG zDaEL<>DF57t|u9cEfjvaPcnSGEnE?KIOmhdHlR(Q`nzQb{WRM_tD8 M4N@FztRe#d03w%OQUCw| literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/61/iris_1_active.json.gz b/sklearn/datasets/tests/data/openml/61/iris_1_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..6dd5e202aeccc497d38128d2e38adf9c45f24688 GIT binary patch literal 291 zcmV+;0o?u{iwFqUu}fP318H(;b6+uEVPkY@c4aPVb8l_{rIAfb!$1&*&&{tWdoI$T z_28{20S~QUK@TD_O}FjHW*2uR#ai;;oy|u@+BAM#virU}&pX3p7xmNv7}QmN7xk(; zX%_huv>3P$aTyOvWg*id6?!C9SsU#MofWsPAqLJVR6)wP(RJO@`3yp^8s8^LW1`V7 z-#WbIV34=_0ls=p;MI9~x;8*G!;d;xCIFL{6{F$VPzA3T^bg?osmsuU88hD?G1`%wNB5op{qv}&c#V4ew1*a+l005@~hUWkP literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/61/iris_None_active.json.gz b/sklearn/datasets/tests/data/openml/61/iris_None_active.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..b1824cde71fe22eba689f9b31d6adef8a14d3f9a GIT binary patch literal 333 zcmV-T0kZxdiwFqiu}fP318H(;b6-wxZe?F#V{~bDWiD!SZ*BnXQ^88ZKoC7QUs3j4 zB{8N@Z$$}sXax&;5Rq-V)sf8xcP7PJ^6yU4q($18Y6Lxa$>zPC_hy*ot(=aSNs{8M zyK*|~e^kWqF2_v3j6vV)70Ad~F%)0{#hO|ui;x&*%Nis}Ddtr&B3P)hZl2g!=Eh=p z9flPNT0MN|@RCXmwA>7^?KzUqiRG(vEfFX1RvPmJQl~{l;2ygo=dxaRNBlZYVlYw< zi7o&MOhh-i5O-|+dKWO?A7PxvQ)RE_h4@QtD`lv7vv!X(Xp~+Weijq$(Rv4ryiwl* zJ&gbn%wx^+n$6nk`BWC7+GU(JI!u=FG|`_}c$LMyv-K&XFz62s$b#P{3xOZFe)~9h f?$6}m$ori@ocsskZw7)tnUlQ(ag(I&I|cv%)C-(T literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index c6afbf5383391..f636cd7cd0cb7 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -95,21 +95,21 @@ def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): def _mock_urlopen_data_description(url): assert (url.startswith(url_prefix_data_description)) - path = os.path.join(currdir, 'mock_openml', str(data_id), + path = os.path.join(currdir, 'data', 'openml', str(data_id), 'data_description.json%s' % path_suffix) return read_fn(path, 'rb') def _mock_urlopen_data_features(url): assert (url.startswith(url_prefix_data_features)) - path = os.path.join(currdir, 'mock_openml', str(data_id), + path = os.path.join(currdir, 'data', 'openml', str(data_id), 'data_features.json%s' % path_suffix) return read_fn(path, 'rb') def _mock_urlopen_download_data(url): assert (url.startswith(url_prefix_download_data)) - path = os.path.join(currdir, 'mock_openml', str(data_id), + path = os.path.join(currdir, 'data', 'openml', str(data_id), 'data.arff%s' % path_suffix) return read_fn(path, 'rb') @@ -129,7 +129,7 @@ def _mock_urlopen_data_list(url): key_val_dict['data_version'], key_val_dict['status'], path_suffix) - json_file_path = os.path.join(currdir, 'mock_openml', + json_file_path = os.path.join(currdir, 'data', 'openml', str(data_id), mock_file) # load the file itself, to simulate a http error json_data = json.loads(read_fn(json_file_path, 'rb'). @@ -334,9 +334,9 @@ def test_mocked_testfiles_exist(): expected_files = ['data.arff.gz', 'data_description.json.gz', 'data_features.json.gz'] assert os.path.isdir(currdir) - assert os.path.isdir(os.path.join(currdir, 'mock_openml')) + assert os.path.isdir(os.path.join(currdir, 'data', 'openml')) for data_id in data_ids: - test_dir = os.path.join(currdir, 'mock_openml', str(data_id)) + test_dir = os.path.join(currdir, 'data', 'openml', str(data_id)) assert os.path.isdir(test_dir) assert len(os.listdir(test_dir)) >= 5 for expected_file in expected_files: From 73c7fdb596200d3b0cbbfed284cde9728e7b7b7e Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 16:54:27 -0400 Subject: [PATCH 093/138] added additional unit test for multi-target --- sklearn/datasets/openml.py | 31 +- .../tests/data/openml/40589/data.arff | 94 +++ .../data/openml/40589/data_description.json | 19 + .../data/openml/40589/data_features.json | 629 ++++++++++++++++++ .../data/openml/40589/emotions_3_active.json | 40 ++ .../openml/40589/emotions_None_active.json | 40 ++ sklearn/datasets/tests/test_openml.py | 16 + 7 files changed, 864 insertions(+), 5 deletions(-) create mode 100644 sklearn/datasets/tests/data/openml/40589/data.arff create mode 100644 sklearn/datasets/tests/data/openml/40589/data_description.json create mode 100644 sklearn/datasets/tests/data/openml/40589/data_features.json create mode 100644 sklearn/datasets/tests/data/openml/40589/emotions_3_active.json create mode 100644 sklearn/datasets/tests/data/openml/40589/emotions_None_active.json diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 019f424275ca9..12c0cd18187aa 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -184,7 +184,7 @@ def _download_data_arff(file_id): def _convert_numericals(data, name_feature): - # converts all numerical columns into floats + # converts all numerical columns in the numpy array into floats for feature in name_feature.values(): if feature['data_type'] == "numeric": idx = int(feature['index']) @@ -192,7 +192,26 @@ def _convert_numericals(data, name_feature): return data +def _determine_default_target(name_feature): + # determines the default target based on the data feature results + # (which is currently more reliable than the data description; + # see issue: https://github.com/openml/OpenML/issues/768) + results = [] + for name, feature in name_feature.items(): + # note: string comparison (not boolean) + if feature['is_target'] == "true": + results.append(name) + + if len(results) == 0: + return None + elif len(results) == 1: + return results[0] + else: + return results + + def _determine_single_target_data_type(name_feature, target_column_name): + # determine the data type of the y array in case there is a single target if not isinstance(target_column_name, string_types): raise ValueError('target_column_name should be of string type, ' 'got: %s' % type(target_column_name)) @@ -213,6 +232,8 @@ def _determine_single_target_data_type(name_feature, target_column_name): def _determine_multi_target_data_type(name_feature, target_column_names): + # determine the data type of the y array in case there are multiple targets + # (throws an error if these targets do not comply with sklearn support) if not isinstance(target_column_names, list): raise ValueError('target_column_name should be list, ' 'got: %s' % type(target_column_names)) @@ -334,14 +355,14 @@ def mem(func): warn("Version {} of dataset {} is inactive, meaning that issues have" " been found in the dataset. Try using a newer version.".format( data_description['version'], data_description['name'])) - if target_column_name == "default-target": - target_column_name = data_description.get('default_target_attribute', - None) - # download actual data + # download data features, meta-info about column types features = cached_get_data_features(data_id) name_feature = {feature['name']: feature for feature in features} + if target_column_name == "default-target": + target_column_name = _determine_default_target(name_feature) + # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous # and target at start or end, we could use a view instead. diff --git a/sklearn/datasets/tests/data/openml/40589/data.arff b/sklearn/datasets/tests/data/openml/40589/data.arff new file mode 100644 index 0000000000000..2af1937ec97a3 --- /dev/null +++ b/sklearn/datasets/tests/data/openml/40589/data.arff @@ -0,0 +1,94 @@ +@relation 'x' +@attribute 'Mean_Acc1298_Mean_Mem40_Centroid' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_Rolloff' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_Flux' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_0' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_1' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_2' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_3' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_4' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_5' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_6' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_7' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_8' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_9' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_10' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_11' numeric +@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_12' numeric +@attribute 'Mean_Acc1298_Std_Mem40_Centroid' numeric +@attribute 'Mean_Acc1298_Std_Mem40_Rolloff' numeric +@attribute 'Mean_Acc1298_Std_Mem40_Flux' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_0' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_1' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_2' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_3' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_4' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_5' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_6' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_7' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_8' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_9' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_10' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_11' numeric +@attribute 'Mean_Acc1298_Std_Mem40_MFCC_12' numeric +@attribute 'Std_Acc1298_Mean_Mem40_Centroid' numeric +@attribute 'Std_Acc1298_Mean_Mem40_Rolloff' numeric +@attribute 'Std_Acc1298_Mean_Mem40_Flux' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_0' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_1' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_2' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_3' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_4' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_5' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_6' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_7' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_8' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_9' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_10' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_11' numeric +@attribute 'Std_Acc1298_Mean_Mem40_MFCC_12' numeric +@attribute 'Std_Acc1298_Std_Mem40_Centroid' numeric +@attribute 'Std_Acc1298_Std_Mem40_Rolloff' numeric +@attribute 'Std_Acc1298_Std_Mem40_Flux' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_0' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_1' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_2' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_3' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_4' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_5' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_6' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_7' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_8' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_9' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_10' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_11' numeric +@attribute 'Std_Acc1298_Std_Mem40_MFCC_12' numeric +@attribute 'BH_LowPeakAmp' numeric +@attribute 'BH_LowPeakBPM' numeric +@attribute 'BH_HighPeakAmp' numeric +@attribute 'BH_HighPeakBPM' numeric +@attribute 'BH_HighLowRatio' numeric +@attribute 'BHSUM1' numeric +@attribute 'BHSUM2' numeric +@attribute 'BHSUM3' numeric +@attribute 'amazed.suprised' {FALSE, TRUE} +@attribute 'happy.pleased' {FALSE, TRUE} +@attribute 'relaxing.calm' {FALSE, TRUE} +@attribute 'quiet.still' {FALSE, TRUE} +@attribute 'sad.lonely' {FALSE, TRUE} +@attribute 'angry.aggresive' {FALSE, TRUE} +@data +0.034741,0.089665,0.091225,-73.302422,6.215179,0.615074,2.03716,0.804065,1.301409,0.558576,0.672063,0.783788,0.76664,0.458712,0.530384,0.812429,0.028851,0.129039,0.039614,5.762173,1.636819,1.170034,1.051511,0.764163,0.642705,0.617868,0.510265,0.566213,0.509149,0.477275,0.505073,0.463535,0.013519,0.050591,0.009025,8.156257,1.077167,0.624711,0.810244,0.399568,0.279947,0.314215,0.231439,0.345401,0.285389,0.210613,0.321896,0.290551,0.022774,0.095801,0.015057,4.748694,0.536378,0.296306,0.27321,0.1758,0.105508,0.168246,0.115849,0.13602,0.110514,0.100517,0.11863,0.094923,0.051035,68,0.014937,136,2,0.245457,0.105065,0.405399,"FALSE","TRUE","TRUE","FALSE","FALSE","FALSE" +0.081374,0.272747,0.085733,-62.584437,3.183163,-0.218145,0.163038,0.620251,0.458514,0.041426,0.308287,0.538152,0.594871,0.734332,0.415489,0.761508,0.066288,0.26237,0.034438,3.480874,1.596532,0.943803,0.804444,0.511229,0.49867,0.523039,0.480916,0.488657,0.483166,0.445187,0.415994,0.405593,0.013621,0.073041,0.010094,1.243981,0.82979,0.252972,0.347831,0.205087,0.168601,0.178009,0.14408,0.178703,0.146937,0.12558,0.128202,0.107007,0.020028,0.06694,0.029483,3.963534,0.38236,0.168389,0.117525,0.098341,0.087046,0.057991,0.059393,0.059457,0.053439,0.067684,0.070075,0.041565,0.295031,70,0.276366,140,2,0.343547,0.276366,0.710924,"TRUE","FALSE","FALSE","FALSE","FALSE","TRUE" +0.110545,0.273567,0.08441,-65.235325,2.794964,0.639047,1.281297,0.757896,0.489412,0.627636,0.469322,0.644336,0.441556,0.335964,0.290713,0.158538,0.082743,0.215373,0.03597,4.834742,1.213443,0.864034,0.909222,0.780572,0.550833,0.63974,0.573309,0.526312,0.562622,0.538407,0.492292,0.455562,0.029112,0.070433,0.008525,2.759906,0.592634,0.761852,0.56874,0.589827,0.281181,0.437752,0.479889,0.22732,0.296224,0.273855,0.191804,0.198025,0.038119,0.065427,0.029622,3.371796,0.430373,0.172862,0.177523,0.184333,0.095718,0.139323,0.109279,0.09065,0.117886,0.100852,0.079917,0.085821,0.161574,61,0,183,3,0.188693,0.045941,0.457372,"FALSE","TRUE","FALSE","FALSE","FALSE","TRUE" +0.042481,0.199281,0.093447,-80.305152,5.824409,0.648848,1.75487,1.495532,0.739909,0.809644,0.460945,0.409566,0.680122,0.590405,0.48138,0.621956,0.049939,0.281616,0.044727,6.719538,1.377811,1.265771,0.986178,0.710955,0.706904,0.710147,0.688825,0.699573,0.577976,0.533882,0.501818,0.495368,0.020749,0.106318,0.009108,3.992357,0.656429,0.927692,0.569916,0.378919,0.530714,0.317807,0.308447,0.324934,0.263444,0.359477,0.274257,0.233287,0.032678,0.11948,0.028707,4.125111,0.461304,0.280751,0.246108,0.142805,0.183657,0.124399,0.155513,0.167114,0.113774,0.112815,0.129145,0.12233,0.043012,66,0.206562,132,2,0.102839,0.241934,0.351009,"FALSE","FALSE","TRUE","FALSE","FALSE","FALSE" +0.07455,0.14088,0.079789,-93.697749,5.543229,1.064262,0.899152,0.890336,0.702328,0.490685,0.796904,0.745373,0.911234,0.594429,0.454186,0.384836,0.035751,0.085592,0.029413,4.755293,1.11629,0.926772,0.634988,0.63966,0.552653,0.527708,0.584705,0.696173,0.648611,0.689096,0.643595,0.578063,0.047014,0.136984,0.010356,7.71314,1.592642,1.02719,0.591399,0.565654,0.52442,0.554501,0.6062,0.61676,0.596926,0.524291,0.637971,0.63796,0.036151,0.087741,0.03018,5.085385,0.551937,0.257562,0.15995,0.175855,0.150907,0.142092,0.222804,0.329188,0.251668,0.265049,0.284196,0.189988,0.029308,100,0.144039,200,2,0.195196,0.310801,0.683817,"FALSE","FALSE","FALSE","TRUE","FALSE","FALSE" +0.052434,0.110653,0.09677,-69.792637,6.598383,1.258462,2.873985,0.503222,0.782427,-0.143505,0.338997,-0.186085,0.325765,0.157168,0.454723,0.353157,0.0611,0.18247,0.046543,5.414537,1.64609,1.149108,0.903827,0.743446,0.70045,0.610953,0.607789,0.56981,0.515551,0.473992,0.492629,0.467567,0.017641,0.049527,0.007909,3.835748,0.769825,0.808127,0.560954,0.396785,0.420713,0.542216,0.508029,0.473474,0.459661,0.355348,0.308208,0.340781,0.037052,0.075122,0.027889,4.694374,0.443698,0.346999,0.277305,0.154298,0.134325,0.098063,0.129451,0.123337,0.151916,0.082887,0.110493,0.072176,0.218684,64,0.05387,128,2,0.403684,0.24591,0.649594,"FALSE","TRUE","TRUE","FALSE","FALSE","FALSE" +0.064067,0.147375,0.078124,-68.698041,4.052059,1.14922,2.063466,0.531396,0.877409,0.66098,0.089885,0.51714,0.166582,0.775128,0.812568,0.364786,0.036757,0.120716,0.029871,3.813653,0.924273,0.969948,0.607092,0.562143,0.487347,0.453649,0.476279,0.440538,0.427923,0.436823,0.474516,0.455837,0.019871,0.052885,0.008053,2.713319,0.424945,0.619237,0.336648,0.271894,0.182622,0.2211,0.201635,0.177046,0.182256,0.216797,0.258205,0.18109,0.024036,0.051788,0.030206,3.777514,0.291206,0.182281,0.159225,0.10201,0.08913,0.085498,0.066714,0.078375,0.067474,0.078946,0.09447,0.113727,0.167898,60,0.358269,120,2,0.755628,0.427281,1.182908,"TRUE","TRUE","FALSE","FALSE","FALSE","FALSE" +0.044949,0.092085,0.097908,-68.406051,4.552287,0.898913,1.641708,1.490264,1.269593,0.884284,0.808403,0.150058,0.474578,0.780169,0.698994,0.767477,0.037329,0.129705,0.043602,5.843585,1.562391,1.162586,1.095826,1.011066,0.753695,0.825064,0.648638,0.658814,0.544174,0.483505,0.565364,0.464623,0.02144,0.042342,0.009317,2.278805,0.584095,0.377787,0.433472,0.405403,0.263973,0.279862,0.233755,0.246134,0.193811,0.128118,0.197081,0.157612,0.035572,0.068647,0.028444,3.708926,0.376434,0.2297,0.237802,0.2602,0.105052,0.116184,0.148467,0.105881,0.11271,0.081464,0.081107,0.071943,0.037882,53,0.059756,106,2,0.23707,0.087547,0.329783,"FALSE","FALSE","FALSE","FALSE","FALSE","TRUE" +0.081354,0.302058,0.09724,-76.209068,2.419066,1.353814,1.681155,1.077603,1.078218,0.875479,0.858871,0.77323,0.843999,0.734046,0.620638,0.670318,0.087255,0.327868,0.04596,6.512197,1.529419,1.16659,0.81849,0.716019,0.682405,0.539359,0.464374,0.512859,0.502584,0.477341,0.467416,0.453966,0.018392,0.053047,0.009042,2.486091,0.392817,0.437824,0.416101,0.194697,0.217095,0.107007,0.121507,0.136194,0.155098,0.146949,0.173602,0.145579,0.019922,0.03042,0.02836,3.928069,0.223277,0.164591,0.181582,0.118775,0.114469,0.061956,0.079447,0.068104,0.08977,0.060114,0.076139,0.103849,0.78087,66,1.156114,132,2,1.131073,1.204185,2.335258,"TRUE","TRUE","FALSE","FALSE","FALSE","FALSE" +0.039819,0.056986,0.073635,-83.146547,11.224703,1.280494,1.008498,0.940606,0.401406,0.008756,0.388885,0.428252,0.200104,0.247948,0.508959,0.575344,0.010135,0.019275,0.028009,3.299295,0.862004,0.643745,0.491714,0.487018,0.395002,0.451746,0.415611,0.419919,0.380613,0.42653,0.393594,0.368378,0.014836,0.038131,0.008281,5.209001,1.18906,1.036365,0.420646,0.47551,0.277937,0.409208,0.393988,0.470132,0.247319,0.33531,0.309596,0.288299,0.028101,0.061662,0.030883,4.743869,0.704132,0.253414,0.181521,0.135988,0.128187,0.14627,0.137304,0.15968,0.147272,0.185677,0.114503,0.084013,0.025843,100,0,200,2,0.084776,0.137788,0.248702,"FALSE","FALSE","TRUE","TRUE","TRUE","FALSE" +0.070779,0.249749,0.088224,-71.464692,3.781501,0.946865,2.00859,0.425796,0.431214,0.74882,0.312963,0.684434,0.448612,0.385034,0.636508,0.394653,0.062566,0.233248,0.03709,5.807147,1.09491,1.257772,1.027029,0.82805,0.60801,0.577094,0.563382,0.501218,0.504829,0.438189,0.428289,0.406116,0.029491,0.146032,0.009238,3.767215,0.836447,0.722986,1.010999,0.4118,0.479368,0.292757,0.367049,0.314475,0.282423,0.253884,0.3112,0.17892,0.035783,0.112092,0.029673,4.566799,0.656572,0.380315,0.280867,0.244503,0.131112,0.176219,0.132303,0.104672,0.112889,0.109043,0.086567,0.066596,0.080509,81,0.406049,162,2,0.293736,0,0.835918,"FALSE","TRUE","TRUE","FALSE","FALSE","FALSE" +0.07661,0.173846,0.085544,-73.431108,4.166807,0.256907,2.069593,0.592233,0.346489,0.572659,1.277228,0.843066,0.006599,0.165121,0.490021,0.452169,0.049047,0.133586,0.035605,4.838325,1.197948,1.178439,0.98664,0.711055,0.634663,0.543885,0.601067,0.617135,0.523592,0.45339,0.450317,0.462819,0.022252,0.044207,0.008193,3.353675,0.74539,0.92196,0.868064,0.362126,0.35653,0.241441,0.290889,0.281937,0.257923,0.250197,0.333141,0.198408,0.028081,0.06554,0.029743,4.33184,0.327743,0.375127,0.245478,0.144704,0.13817,0.113705,0.13897,0.122011,0.102979,0.075501,0.081472,0.065556,0.324556,70,0.533895,140,2,0.572201,0.577333,1.342122,"FALSE","FALSE","TRUE","FALSE","FALSE","FALSE" +0.112665,0.3462,0.094216,-73.22667,2.741632,1.707433,1.257558,0.805555,0.742856,0.615765,0.947719,0.75842,0.813356,0.61255,0.468198,0.494374,0.082081,0.285271,0.038763,4.803621,1.004541,1.101516,0.757763,0.683399,0.630638,0.49182,0.42669,0.462839,0.448752,0.390417,0.425064,0.404553,0.045421,0.073893,0.007405,2.694329,0.741981,0.349342,0.219867,0.303975,0.215078,0.158922,0.131802,0.096486,0.103487,0.073086,0.095559,0.074911,0.02611,0.035949,0.029573,3.85519,0.30037,0.120505,0.101579,0.069436,0.059147,0.053095,0.052991,0.056388,0.052235,0.043043,0.045284,0.049654,1.180777,68,1.368186,136,2,1.233543,1.41513,2.693369,"TRUE","FALSE","FALSE","FALSE","FALSE","FALSE" +% JvR: Truncated data \ No newline at end of file diff --git a/sklearn/datasets/tests/data/openml/40589/data_description.json b/sklearn/datasets/tests/data/openml/40589/data_description.json new file mode 100644 index 0000000000000..3931ae55763d0 --- /dev/null +++ b/sklearn/datasets/tests/data/openml/40589/data_description.json @@ -0,0 +1,19 @@ +{ + "data_set_description": { + "id": "40589", + "name": "emotions", + "version": "3", + "description": "Multi-label dataset. Audio dataset (emotions) consists of 593 musical files with 6 clustered emotional labels and 72 predictors. Each song can be labeled with one or more of the labels {amazed-surprised, happy-pleased, relaxing-calm, quiet-still, sad-lonely, angry-aggressive}.", + "format": "ARFF", + "upload_date": "2017-02-16T21:19:26", + "licence": "Public", + "url": "https:\/\/www.openml.org\/data\/v1\/download\/4644182\/emotions.arff", + "file_id": "4644182", + "default_target_attribute": "amazed.suprised,happy.pleased,relaxing.calm,quiet.still,sad.lonely,angry.aggresive", + "citation": "http:\/\/ismir2008.ismir.net\/papers\/ISMIR2008_275.pdf", + "tag": ["2016_multilabel_r_benchmark_paper", "multi_label"], + "visibility": "public", + "status": "active", + "md5_checksum": "742d72e4ce2ebf59d1be9f15807e0938" + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/data/openml/40589/data_features.json b/sklearn/datasets/tests/data/openml/40589/data_features.json new file mode 100644 index 0000000000000..d34d793df839a --- /dev/null +++ b/sklearn/datasets/tests/data/openml/40589/data_features.json @@ -0,0 +1,629 @@ +{ + "data_features": { + "feature": [{ + "index": "0", + "name": "Mean_Acc1298_Mean_Mem40_Centroid", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "1", + "name": "Mean_Acc1298_Mean_Mem40_Rolloff", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "2", + "name": "Mean_Acc1298_Mean_Mem40_Flux", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "3", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_0", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "4", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_1", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "5", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_2", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "6", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_3", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "7", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_4", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "8", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_5", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "9", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_6", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "10", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_7", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "11", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_8", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "12", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_9", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "13", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_10", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "14", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_11", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "15", + "name": "Mean_Acc1298_Mean_Mem40_MFCC_12", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "16", + "name": "Mean_Acc1298_Std_Mem40_Centroid", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "17", + "name": "Mean_Acc1298_Std_Mem40_Rolloff", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "18", + "name": "Mean_Acc1298_Std_Mem40_Flux", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "19", + "name": "Mean_Acc1298_Std_Mem40_MFCC_0", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "20", + "name": "Mean_Acc1298_Std_Mem40_MFCC_1", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "21", + "name": "Mean_Acc1298_Std_Mem40_MFCC_2", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "22", + "name": "Mean_Acc1298_Std_Mem40_MFCC_3", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "23", + "name": "Mean_Acc1298_Std_Mem40_MFCC_4", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "24", + "name": "Mean_Acc1298_Std_Mem40_MFCC_5", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "25", + "name": "Mean_Acc1298_Std_Mem40_MFCC_6", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "26", + "name": "Mean_Acc1298_Std_Mem40_MFCC_7", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "27", + "name": "Mean_Acc1298_Std_Mem40_MFCC_8", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "28", + "name": "Mean_Acc1298_Std_Mem40_MFCC_9", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "29", + "name": "Mean_Acc1298_Std_Mem40_MFCC_10", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "30", + "name": "Mean_Acc1298_Std_Mem40_MFCC_11", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "31", + "name": "Mean_Acc1298_Std_Mem40_MFCC_12", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "32", + "name": "Std_Acc1298_Mean_Mem40_Centroid", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "33", + "name": "Std_Acc1298_Mean_Mem40_Rolloff", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "34", + "name": "Std_Acc1298_Mean_Mem40_Flux", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "35", + "name": "Std_Acc1298_Mean_Mem40_MFCC_0", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "36", + "name": "Std_Acc1298_Mean_Mem40_MFCC_1", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "37", + "name": "Std_Acc1298_Mean_Mem40_MFCC_2", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "38", + "name": "Std_Acc1298_Mean_Mem40_MFCC_3", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "39", + "name": "Std_Acc1298_Mean_Mem40_MFCC_4", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "40", + "name": "Std_Acc1298_Mean_Mem40_MFCC_5", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "41", + "name": "Std_Acc1298_Mean_Mem40_MFCC_6", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "42", + "name": "Std_Acc1298_Mean_Mem40_MFCC_7", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "43", + "name": "Std_Acc1298_Mean_Mem40_MFCC_8", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "44", + "name": "Std_Acc1298_Mean_Mem40_MFCC_9", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "45", + "name": "Std_Acc1298_Mean_Mem40_MFCC_10", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "46", + "name": "Std_Acc1298_Mean_Mem40_MFCC_11", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "47", + "name": "Std_Acc1298_Mean_Mem40_MFCC_12", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "48", + "name": "Std_Acc1298_Std_Mem40_Centroid", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "49", + "name": "Std_Acc1298_Std_Mem40_Rolloff", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "50", + "name": "Std_Acc1298_Std_Mem40_Flux", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "51", + "name": "Std_Acc1298_Std_Mem40_MFCC_0", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "52", + "name": "Std_Acc1298_Std_Mem40_MFCC_1", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "53", + "name": "Std_Acc1298_Std_Mem40_MFCC_2", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "54", + "name": "Std_Acc1298_Std_Mem40_MFCC_3", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "55", + "name": "Std_Acc1298_Std_Mem40_MFCC_4", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "56", + "name": "Std_Acc1298_Std_Mem40_MFCC_5", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "57", + "name": "Std_Acc1298_Std_Mem40_MFCC_6", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "58", + "name": "Std_Acc1298_Std_Mem40_MFCC_7", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "59", + "name": "Std_Acc1298_Std_Mem40_MFCC_8", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "60", + "name": "Std_Acc1298_Std_Mem40_MFCC_9", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "61", + "name": "Std_Acc1298_Std_Mem40_MFCC_10", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "62", + "name": "Std_Acc1298_Std_Mem40_MFCC_11", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "63", + "name": "Std_Acc1298_Std_Mem40_MFCC_12", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "64", + "name": "BH_LowPeakAmp", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "65", + "name": "BH_LowPeakBPM", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "66", + "name": "BH_HighPeakAmp", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "67", + "name": "BH_HighPeakBPM", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "68", + "name": "BH_HighLowRatio", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "69", + "name": "BHSUM1", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "70", + "name": "BHSUM2", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "71", + "name": "BHSUM3", + "data_type": "numeric", + "is_target": "false", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "72", + "name": "amazed.suprised", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "73", + "name": "happy.pleased", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "74", + "name": "relaxing.calm", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "75", + "name": "quiet.still", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "76", + "name": "sad.lonely", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }, { + "index": "77", + "name": "angry.aggresive", + "data_type": "nominal", + "is_target": "true", + "is_ignore": "false", + "is_row_identifier": "false", + "number_of_missing_values": "0" + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/data/openml/40589/emotions_3_active.json b/sklearn/datasets/tests/data/openml/40589/emotions_3_active.json new file mode 100644 index 0000000000000..e20afeac4236a --- /dev/null +++ b/sklearn/datasets/tests/data/openml/40589/emotions_3_active.json @@ -0,0 +1,40 @@ +{ + "data": { + "dataset": [{ + "did": 40589, + "name": "emotions", + "version": 3, + "status": "active", + "format": "ARFF", + "file_id": 4644182, + "quality": [{ + "name": "MajorityClassSize", + "value": "420.0" + }, { + "name": "MinorityClassSize", + "value": "173.0" + }, { + "name": "NumberOfClasses", + "value": "2.0" + }, { + "name": "NumberOfFeatures", + "value": "78.0" + }, { + "name": "NumberOfInstances", + "value": "593.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "72.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "6.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/data/openml/40589/emotions_None_active.json b/sklearn/datasets/tests/data/openml/40589/emotions_None_active.json new file mode 100644 index 0000000000000..e20afeac4236a --- /dev/null +++ b/sklearn/datasets/tests/data/openml/40589/emotions_None_active.json @@ -0,0 +1,40 @@ +{ + "data": { + "dataset": [{ + "did": 40589, + "name": "emotions", + "version": 3, + "status": "active", + "format": "ARFF", + "file_id": 4644182, + "quality": [{ + "name": "MajorityClassSize", + "value": "420.0" + }, { + "name": "MinorityClassSize", + "value": "173.0" + }, { + "name": "NumberOfClasses", + "value": "2.0" + }, { + "name": "NumberOfFeatures", + "value": "78.0" + }, { + "name": "NumberOfInstances", + "value": "593.0" + }, { + "name": "NumberOfInstancesWithMissingValues", + "value": "0.0" + }, { + "name": "NumberOfMissingValues", + "value": "0.0" + }, { + "name": "NumberOfNumericFeatures", + "value": "72.0" + }, { + "name": "NumberOfSymbolicFeatures", + "value": "6.0" + }] + }] + } +} \ No newline at end of file diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index f636cd7cd0cb7..63519dd286fc7 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -282,6 +282,22 @@ def test_fetch_openml_miceprotein(monkeypatch): compare_default_target=True) +def test_fetch_openml_emotions(monkeypatch): + # classification dataset with multiple targets (natively) + data_id = 40589 + data_name = 'emotions' + data_version = 3 + target_column = ['amazed.suprised', 'happy.pleased', 'relaxing.calm', + 'quiet.still', 'sad.lonely', 'angry.aggresive'] + expected_observations = 13 + expected_features = 72 + _monkey_patch_webbased_functions(monkeypatch, data_id, False) + fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + np.float64, object, expect_sparse=False, + compare_default_target=True) + + def test_target_attribute(monkeypatch): # simple sanity check. If this one fails, something is wrong with setting # up the mock files. From 07b2a7ef6674dfb0343ba19ab38bb0608c69a5d7 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 16:56:41 -0400 Subject: [PATCH 094/138] changed joblib import --- sklearn/datasets/openml.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 12c0cd18187aa..2a3e6387ad65c 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -16,10 +16,9 @@ import sklearn.externals.arff as arff from .base import get_data_home -from ..externals.joblib import Memory from ..externals.six import string_types from ..externals.six.moves.urllib.error import HTTPError -from ..utils import Bunch +from ..utils import Bunch, Memory __all__ = ['fetch_openml'] From 6393f0a12eff2953925da96050ba6e9f0b30fe35 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 16:58:53 -0400 Subject: [PATCH 095/138] emotions unit test to gzip format --- .../tests/data/openml/40589/data.arff | 94 --- .../tests/data/openml/40589/data.arff.gz | Bin 0 -> 4344 bytes .../data/openml/40589/data_description.json | 19 - .../openml/40589/data_description.json.gz | Bin 0 -> 596 bytes .../data/openml/40589/data_features.json | 629 ------------------ .../data/openml/40589/data_features.json.gz | Bin 0 -> 827 bytes .../data/openml/40589/emotions_3_active.json | 40 -- .../openml/40589/emotions_3_active.json.gz | Bin 0 -> 297 bytes .../openml/40589/emotions_None_active.json | 40 -- .../openml/40589/emotions_None_active.json.gz | Bin 0 -> 300 bytes sklearn/datasets/tests/test_openml.py | 2 +- 11 files changed, 1 insertion(+), 823 deletions(-) delete mode 100644 sklearn/datasets/tests/data/openml/40589/data.arff create mode 100644 sklearn/datasets/tests/data/openml/40589/data.arff.gz delete mode 100644 sklearn/datasets/tests/data/openml/40589/data_description.json create mode 100644 sklearn/datasets/tests/data/openml/40589/data_description.json.gz delete mode 100644 sklearn/datasets/tests/data/openml/40589/data_features.json create mode 100644 sklearn/datasets/tests/data/openml/40589/data_features.json.gz delete mode 100644 sklearn/datasets/tests/data/openml/40589/emotions_3_active.json create mode 100644 sklearn/datasets/tests/data/openml/40589/emotions_3_active.json.gz delete mode 100644 sklearn/datasets/tests/data/openml/40589/emotions_None_active.json create mode 100644 sklearn/datasets/tests/data/openml/40589/emotions_None_active.json.gz diff --git a/sklearn/datasets/tests/data/openml/40589/data.arff b/sklearn/datasets/tests/data/openml/40589/data.arff deleted file mode 100644 index 2af1937ec97a3..0000000000000 --- a/sklearn/datasets/tests/data/openml/40589/data.arff +++ /dev/null @@ -1,94 +0,0 @@ -@relation 'x' -@attribute 'Mean_Acc1298_Mean_Mem40_Centroid' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_Rolloff' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_Flux' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_0' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_1' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_2' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_3' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_4' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_5' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_6' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_7' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_8' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_9' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_10' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_11' numeric -@attribute 'Mean_Acc1298_Mean_Mem40_MFCC_12' numeric -@attribute 'Mean_Acc1298_Std_Mem40_Centroid' numeric -@attribute 'Mean_Acc1298_Std_Mem40_Rolloff' numeric -@attribute 'Mean_Acc1298_Std_Mem40_Flux' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_0' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_1' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_2' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_3' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_4' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_5' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_6' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_7' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_8' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_9' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_10' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_11' numeric -@attribute 'Mean_Acc1298_Std_Mem40_MFCC_12' numeric -@attribute 'Std_Acc1298_Mean_Mem40_Centroid' numeric -@attribute 'Std_Acc1298_Mean_Mem40_Rolloff' numeric -@attribute 'Std_Acc1298_Mean_Mem40_Flux' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_0' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_1' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_2' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_3' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_4' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_5' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_6' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_7' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_8' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_9' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_10' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_11' numeric -@attribute 'Std_Acc1298_Mean_Mem40_MFCC_12' numeric -@attribute 'Std_Acc1298_Std_Mem40_Centroid' numeric -@attribute 'Std_Acc1298_Std_Mem40_Rolloff' numeric -@attribute 'Std_Acc1298_Std_Mem40_Flux' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_0' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_1' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_2' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_3' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_4' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_5' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_6' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_7' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_8' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_9' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_10' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_11' numeric -@attribute 'Std_Acc1298_Std_Mem40_MFCC_12' numeric -@attribute 'BH_LowPeakAmp' numeric -@attribute 'BH_LowPeakBPM' numeric -@attribute 'BH_HighPeakAmp' numeric -@attribute 'BH_HighPeakBPM' numeric -@attribute 'BH_HighLowRatio' numeric -@attribute 'BHSUM1' numeric -@attribute 'BHSUM2' numeric -@attribute 'BHSUM3' numeric -@attribute 'amazed.suprised' {FALSE, TRUE} -@attribute 'happy.pleased' {FALSE, TRUE} -@attribute 'relaxing.calm' {FALSE, TRUE} -@attribute 'quiet.still' {FALSE, TRUE} -@attribute 'sad.lonely' {FALSE, TRUE} -@attribute 'angry.aggresive' {FALSE, TRUE} -@data -0.034741,0.089665,0.091225,-73.302422,6.215179,0.615074,2.03716,0.804065,1.301409,0.558576,0.672063,0.783788,0.76664,0.458712,0.530384,0.812429,0.028851,0.129039,0.039614,5.762173,1.636819,1.170034,1.051511,0.764163,0.642705,0.617868,0.510265,0.566213,0.509149,0.477275,0.505073,0.463535,0.013519,0.050591,0.009025,8.156257,1.077167,0.624711,0.810244,0.399568,0.279947,0.314215,0.231439,0.345401,0.285389,0.210613,0.321896,0.290551,0.022774,0.095801,0.015057,4.748694,0.536378,0.296306,0.27321,0.1758,0.105508,0.168246,0.115849,0.13602,0.110514,0.100517,0.11863,0.094923,0.051035,68,0.014937,136,2,0.245457,0.105065,0.405399,"FALSE","TRUE","TRUE","FALSE","FALSE","FALSE" -0.081374,0.272747,0.085733,-62.584437,3.183163,-0.218145,0.163038,0.620251,0.458514,0.041426,0.308287,0.538152,0.594871,0.734332,0.415489,0.761508,0.066288,0.26237,0.034438,3.480874,1.596532,0.943803,0.804444,0.511229,0.49867,0.523039,0.480916,0.488657,0.483166,0.445187,0.415994,0.405593,0.013621,0.073041,0.010094,1.243981,0.82979,0.252972,0.347831,0.205087,0.168601,0.178009,0.14408,0.178703,0.146937,0.12558,0.128202,0.107007,0.020028,0.06694,0.029483,3.963534,0.38236,0.168389,0.117525,0.098341,0.087046,0.057991,0.059393,0.059457,0.053439,0.067684,0.070075,0.041565,0.295031,70,0.276366,140,2,0.343547,0.276366,0.710924,"TRUE","FALSE","FALSE","FALSE","FALSE","TRUE" -0.110545,0.273567,0.08441,-65.235325,2.794964,0.639047,1.281297,0.757896,0.489412,0.627636,0.469322,0.644336,0.441556,0.335964,0.290713,0.158538,0.082743,0.215373,0.03597,4.834742,1.213443,0.864034,0.909222,0.780572,0.550833,0.63974,0.573309,0.526312,0.562622,0.538407,0.492292,0.455562,0.029112,0.070433,0.008525,2.759906,0.592634,0.761852,0.56874,0.589827,0.281181,0.437752,0.479889,0.22732,0.296224,0.273855,0.191804,0.198025,0.038119,0.065427,0.029622,3.371796,0.430373,0.172862,0.177523,0.184333,0.095718,0.139323,0.109279,0.09065,0.117886,0.100852,0.079917,0.085821,0.161574,61,0,183,3,0.188693,0.045941,0.457372,"FALSE","TRUE","FALSE","FALSE","FALSE","TRUE" -0.042481,0.199281,0.093447,-80.305152,5.824409,0.648848,1.75487,1.495532,0.739909,0.809644,0.460945,0.409566,0.680122,0.590405,0.48138,0.621956,0.049939,0.281616,0.044727,6.719538,1.377811,1.265771,0.986178,0.710955,0.706904,0.710147,0.688825,0.699573,0.577976,0.533882,0.501818,0.495368,0.020749,0.106318,0.009108,3.992357,0.656429,0.927692,0.569916,0.378919,0.530714,0.317807,0.308447,0.324934,0.263444,0.359477,0.274257,0.233287,0.032678,0.11948,0.028707,4.125111,0.461304,0.280751,0.246108,0.142805,0.183657,0.124399,0.155513,0.167114,0.113774,0.112815,0.129145,0.12233,0.043012,66,0.206562,132,2,0.102839,0.241934,0.351009,"FALSE","FALSE","TRUE","FALSE","FALSE","FALSE" -0.07455,0.14088,0.079789,-93.697749,5.543229,1.064262,0.899152,0.890336,0.702328,0.490685,0.796904,0.745373,0.911234,0.594429,0.454186,0.384836,0.035751,0.085592,0.029413,4.755293,1.11629,0.926772,0.634988,0.63966,0.552653,0.527708,0.584705,0.696173,0.648611,0.689096,0.643595,0.578063,0.047014,0.136984,0.010356,7.71314,1.592642,1.02719,0.591399,0.565654,0.52442,0.554501,0.6062,0.61676,0.596926,0.524291,0.637971,0.63796,0.036151,0.087741,0.03018,5.085385,0.551937,0.257562,0.15995,0.175855,0.150907,0.142092,0.222804,0.329188,0.251668,0.265049,0.284196,0.189988,0.029308,100,0.144039,200,2,0.195196,0.310801,0.683817,"FALSE","FALSE","FALSE","TRUE","FALSE","FALSE" -0.052434,0.110653,0.09677,-69.792637,6.598383,1.258462,2.873985,0.503222,0.782427,-0.143505,0.338997,-0.186085,0.325765,0.157168,0.454723,0.353157,0.0611,0.18247,0.046543,5.414537,1.64609,1.149108,0.903827,0.743446,0.70045,0.610953,0.607789,0.56981,0.515551,0.473992,0.492629,0.467567,0.017641,0.049527,0.007909,3.835748,0.769825,0.808127,0.560954,0.396785,0.420713,0.542216,0.508029,0.473474,0.459661,0.355348,0.308208,0.340781,0.037052,0.075122,0.027889,4.694374,0.443698,0.346999,0.277305,0.154298,0.134325,0.098063,0.129451,0.123337,0.151916,0.082887,0.110493,0.072176,0.218684,64,0.05387,128,2,0.403684,0.24591,0.649594,"FALSE","TRUE","TRUE","FALSE","FALSE","FALSE" -0.064067,0.147375,0.078124,-68.698041,4.052059,1.14922,2.063466,0.531396,0.877409,0.66098,0.089885,0.51714,0.166582,0.775128,0.812568,0.364786,0.036757,0.120716,0.029871,3.813653,0.924273,0.969948,0.607092,0.562143,0.487347,0.453649,0.476279,0.440538,0.427923,0.436823,0.474516,0.455837,0.019871,0.052885,0.008053,2.713319,0.424945,0.619237,0.336648,0.271894,0.182622,0.2211,0.201635,0.177046,0.182256,0.216797,0.258205,0.18109,0.024036,0.051788,0.030206,3.777514,0.291206,0.182281,0.159225,0.10201,0.08913,0.085498,0.066714,0.078375,0.067474,0.078946,0.09447,0.113727,0.167898,60,0.358269,120,2,0.755628,0.427281,1.182908,"TRUE","TRUE","FALSE","FALSE","FALSE","FALSE" -0.044949,0.092085,0.097908,-68.406051,4.552287,0.898913,1.641708,1.490264,1.269593,0.884284,0.808403,0.150058,0.474578,0.780169,0.698994,0.767477,0.037329,0.129705,0.043602,5.843585,1.562391,1.162586,1.095826,1.011066,0.753695,0.825064,0.648638,0.658814,0.544174,0.483505,0.565364,0.464623,0.02144,0.042342,0.009317,2.278805,0.584095,0.377787,0.433472,0.405403,0.263973,0.279862,0.233755,0.246134,0.193811,0.128118,0.197081,0.157612,0.035572,0.068647,0.028444,3.708926,0.376434,0.2297,0.237802,0.2602,0.105052,0.116184,0.148467,0.105881,0.11271,0.081464,0.081107,0.071943,0.037882,53,0.059756,106,2,0.23707,0.087547,0.329783,"FALSE","FALSE","FALSE","FALSE","FALSE","TRUE" -0.081354,0.302058,0.09724,-76.209068,2.419066,1.353814,1.681155,1.077603,1.078218,0.875479,0.858871,0.77323,0.843999,0.734046,0.620638,0.670318,0.087255,0.327868,0.04596,6.512197,1.529419,1.16659,0.81849,0.716019,0.682405,0.539359,0.464374,0.512859,0.502584,0.477341,0.467416,0.453966,0.018392,0.053047,0.009042,2.486091,0.392817,0.437824,0.416101,0.194697,0.217095,0.107007,0.121507,0.136194,0.155098,0.146949,0.173602,0.145579,0.019922,0.03042,0.02836,3.928069,0.223277,0.164591,0.181582,0.118775,0.114469,0.061956,0.079447,0.068104,0.08977,0.060114,0.076139,0.103849,0.78087,66,1.156114,132,2,1.131073,1.204185,2.335258,"TRUE","TRUE","FALSE","FALSE","FALSE","FALSE" -0.039819,0.056986,0.073635,-83.146547,11.224703,1.280494,1.008498,0.940606,0.401406,0.008756,0.388885,0.428252,0.200104,0.247948,0.508959,0.575344,0.010135,0.019275,0.028009,3.299295,0.862004,0.643745,0.491714,0.487018,0.395002,0.451746,0.415611,0.419919,0.380613,0.42653,0.393594,0.368378,0.014836,0.038131,0.008281,5.209001,1.18906,1.036365,0.420646,0.47551,0.277937,0.409208,0.393988,0.470132,0.247319,0.33531,0.309596,0.288299,0.028101,0.061662,0.030883,4.743869,0.704132,0.253414,0.181521,0.135988,0.128187,0.14627,0.137304,0.15968,0.147272,0.185677,0.114503,0.084013,0.025843,100,0,200,2,0.084776,0.137788,0.248702,"FALSE","FALSE","TRUE","TRUE","TRUE","FALSE" -0.070779,0.249749,0.088224,-71.464692,3.781501,0.946865,2.00859,0.425796,0.431214,0.74882,0.312963,0.684434,0.448612,0.385034,0.636508,0.394653,0.062566,0.233248,0.03709,5.807147,1.09491,1.257772,1.027029,0.82805,0.60801,0.577094,0.563382,0.501218,0.504829,0.438189,0.428289,0.406116,0.029491,0.146032,0.009238,3.767215,0.836447,0.722986,1.010999,0.4118,0.479368,0.292757,0.367049,0.314475,0.282423,0.253884,0.3112,0.17892,0.035783,0.112092,0.029673,4.566799,0.656572,0.380315,0.280867,0.244503,0.131112,0.176219,0.132303,0.104672,0.112889,0.109043,0.086567,0.066596,0.080509,81,0.406049,162,2,0.293736,0,0.835918,"FALSE","TRUE","TRUE","FALSE","FALSE","FALSE" -0.07661,0.173846,0.085544,-73.431108,4.166807,0.256907,2.069593,0.592233,0.346489,0.572659,1.277228,0.843066,0.006599,0.165121,0.490021,0.452169,0.049047,0.133586,0.035605,4.838325,1.197948,1.178439,0.98664,0.711055,0.634663,0.543885,0.601067,0.617135,0.523592,0.45339,0.450317,0.462819,0.022252,0.044207,0.008193,3.353675,0.74539,0.92196,0.868064,0.362126,0.35653,0.241441,0.290889,0.281937,0.257923,0.250197,0.333141,0.198408,0.028081,0.06554,0.029743,4.33184,0.327743,0.375127,0.245478,0.144704,0.13817,0.113705,0.13897,0.122011,0.102979,0.075501,0.081472,0.065556,0.324556,70,0.533895,140,2,0.572201,0.577333,1.342122,"FALSE","FALSE","TRUE","FALSE","FALSE","FALSE" -0.112665,0.3462,0.094216,-73.22667,2.741632,1.707433,1.257558,0.805555,0.742856,0.615765,0.947719,0.75842,0.813356,0.61255,0.468198,0.494374,0.082081,0.285271,0.038763,4.803621,1.004541,1.101516,0.757763,0.683399,0.630638,0.49182,0.42669,0.462839,0.448752,0.390417,0.425064,0.404553,0.045421,0.073893,0.007405,2.694329,0.741981,0.349342,0.219867,0.303975,0.215078,0.158922,0.131802,0.096486,0.103487,0.073086,0.095559,0.074911,0.02611,0.035949,0.029573,3.85519,0.30037,0.120505,0.101579,0.069436,0.059147,0.053095,0.052991,0.056388,0.052235,0.043043,0.045284,0.049654,1.180777,68,1.368186,136,2,1.233543,1.41513,2.693369,"TRUE","FALSE","FALSE","FALSE","FALSE","FALSE" -% JvR: Truncated data \ No newline at end of file diff --git a/sklearn/datasets/tests/data/openml/40589/data.arff.gz b/sklearn/datasets/tests/data/openml/40589/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..96ed11d9695574155b6bc8c64cc1f655acfe7146 GIT binary patch literal 4344 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 Date: Sat, 21 Jul 2018 17:33:59 -0400 Subject: [PATCH 096/138] review by Roman --- sklearn/datasets/openml.py | 17 +++++++++-------- sklearn/datasets/tests/test_openml.py | 27 ++++++--------------------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 2a3e6387ad65c..ef901b195e535 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -13,10 +13,10 @@ import numpy as np -import sklearn.externals.arff as arff +from sklearn.externals import arff from .base import get_data_home -from ..externals.six import string_types +from ..externals.six import string_types, PY2 from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch, Memory @@ -90,7 +90,7 @@ def _convert_arff_data(arff_data): Returns ------- - X : np.ndarray + X : np.array (or later also: scipy.sparse.csr_matrix) """ if isinstance(arff_data, list): @@ -172,8 +172,8 @@ def _download_data_arff(file_id): # https://www.openml.org/api_data_docs#!/data/get_download_id url = _DATA_FILE.format(file_id) response = urlopen(url) - if sys.version_info[0] == 2: - # Python2.7 numpy can't handle unicode? + if PY2: + # Because Python2.7 numpy can't handle unicode arff_file = arff.loads(response.read()) else: arff_file = arff.loads(response.read().decode('utf-8')) @@ -216,15 +216,16 @@ def _determine_single_target_data_type(name_feature, target_column_name): 'got: %s' % type(target_column_name)) if target_column_name not in name_feature: raise KeyError('Could not find target_column_name={}') + feature = name_feature[target_column_name] # note: we compare to a string, not boolean - if name_feature[target_column_name]['is_ignore'] == 'true': + if feature['is_ignore'] == 'true': warn('target_column_name={} has flag is_ignore.'.format( target_column_name)) - if name_feature[target_column_name]['is_row_identifier'] == 'true': + if feature['is_row_identifier'] == 'true': warn('target_column_name={} has flag is_row_identifier.'.format( target_column_name)) - if name_feature[target_column_name]['data_type'] == "numeric": + if feature['data_type'] == "numeric": return np.float64 else: return object diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 9eb8702fec278..57cfed2979690 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -50,13 +50,13 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, # check whether the data by id and data by id target are equal data_by_id_default = fetch_openml(data_id=data_id, cache=False) if data_by_id.data.dtype == np.float64: - np.testing.assert_almost_equal(data_by_id.data, - data_by_id_default.data) + np.testing.assert_allclose(data_by_id.data, + data_by_id_default.data) else: assert np.array_equal(data_by_id.data, data_by_id_default.data) if data_by_id.target.dtype == np.float64: - np.testing.assert_almost_equal(data_by_id.target, - data_by_id_default.target) + np.testing.assert_allclose(data_by_id.target, + data_by_id_default.target) else: assert np.array_equal(data_by_id.target, data_by_id_default.target) @@ -71,9 +71,8 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, for feature in _get_data_features(data_id)} for idx, feature_name in enumerate(data_by_id.feature_names): if feature_name_type[feature_name] == 'numeric': - # casting trick according to Jaime at - # stackoverflow.com/questions/19486283/ - # how-do-i-quickly-check-if-all-elements-of-numpy-array-are-floats + # check that all elements in an object array are numeric + # cf. https://stackoverflow.com/a/19486803/1791279 assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, np.number) @@ -345,20 +344,6 @@ def test_raises_illegal_multitarget(monkeypatch): target_column_name=targets, cache=False) -def test_mocked_testfiles_exist(): - data_ids = [2, 61, 292, 561, 40675] - expected_files = ['data.arff.gz', 'data_description.json.gz', - 'data_features.json.gz'] - assert os.path.isdir(currdir) - assert os.path.isdir(os.path.join(currdir, 'data', 'openml')) - for data_id in data_ids: - test_dir = os.path.join(currdir, 'data', 'openml', str(data_id)) - assert os.path.isdir(test_dir) - assert len(os.listdir(test_dir)) >= 5 - for expected_file in expected_files: - assert os.path.isfile(os.path.join(test_dir, expected_file)) - - def test_warn_ignore_attribute(monkeypatch): data_id = 40966 expected_row_id_msg = "target_column_name={} has flag is_row_identifier." From f71548e804f9f72219494fe0e0eeadafb8aa9a48 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 17:46:12 -0400 Subject: [PATCH 097/138] extended default feature check --- sklearn/datasets/tests/test_openml.py | 30 +++++++++++++++------------ 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 57cfed2979690..aa39baadbc5e5 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -8,7 +8,8 @@ import sklearn from sklearn.datasets import fetch_openml -from sklearn.datasets.openml import _get_data_features +from sklearn.datasets.openml import _get_data_features, \ + _determine_default_target from sklearn.utils.testing import (assert_warns_message, assert_raise_message) from sklearn.externals.six import string_types @@ -79,6 +80,14 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, return data_by_id +def _determine_default_features(data_id, expected_default_target): + # fetch features + features = _get_data_features(data_id) + name_feature = {feature['name']: feature for feature in features} + default_target = _determine_default_target(name_feature) + assert expected_default_target == default_target + + def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): url_prefix_data_description = "https://openml.org/api/v1/json/data/" url_prefix_data_features = "https://openml.org/api/v1/json/data/features/" @@ -168,6 +177,7 @@ def test_fetch_openml_iris(monkeypatch): expected_observations, expected_features, np.float64, object, expect_sparse=False, compare_default_target=True) + _determine_default_features(data_id, target_column) def test_fetch_openml_iris_multitarget(monkeypatch): @@ -200,6 +210,7 @@ def test_fetch_openml_anneal(monkeypatch): expected_observations, expected_features, object, object, expect_sparse=False, compare_default_target=True) + _determine_default_features(data_id, target_column) def test_fetch_openml_anneal_multitarget(monkeypatch): @@ -231,6 +242,7 @@ def test_fetch_openml_cpu(monkeypatch): expected_observations, expected_features, object, np.float64, expect_sparse=False, compare_default_target=True) + _determine_default_features(data_id, target_column) def test_fetch_openml_australian(monkeypatch): @@ -260,6 +272,7 @@ def test_fetch_openml_australian(monkeypatch): 'exptected_target_dtype': object, 'compare_default_target': True} ) + _determine_default_features(data_id, target_column) def test_fetch_openml_miceprotein(monkeypatch): @@ -279,6 +292,7 @@ def test_fetch_openml_miceprotein(monkeypatch): expected_observations, expected_features, np.float64, object, expect_sparse=False, compare_default_target=True) + _determine_default_features(data_id, target_column) def test_fetch_openml_emotions(monkeypatch): @@ -291,24 +305,14 @@ def test_fetch_openml_emotions(monkeypatch): expected_observations = 13 expected_features = 72 _monkey_patch_webbased_functions(monkeypatch, data_id) + + _determine_default_features(data_id, target_column) fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, np.float64, object, expect_sparse=False, compare_default_target=True) -def test_target_attribute(monkeypatch): - # simple sanity check. If this one fails, something is wrong with setting - # up the mock files. - data_id = 61 - _monkey_patch_webbased_functions(monkeypatch, data_id) - data_description = sklearn.datasets.openml._get_data_description_by_id( - data_id) - target_column_name = data_description.get('default_target_attribute', None) - assert target_column_name == 'class' - assert isinstance(target_column_name, string_types) - - def test_fetch_openml_inactive(monkeypatch): # fetch inactive dataset by id data_id = 40675 From 2cf14eaf2b94176e0bf15b436987227385dc83bb Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 17:58:15 -0400 Subject: [PATCH 098/138] explicit naming for feature dicts --- sklearn/datasets/openml.py | 47 ++++++++++++++------------- sklearn/datasets/tests/test_openml.py | 3 ++ 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index ef901b195e535..7ff0ec76f96e6 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -182,21 +182,21 @@ def _download_data_arff(file_id): return arff_file -def _convert_numericals(data, name_feature): +def _convert_numericals(data, features): # converts all numerical columns in the numpy array into floats - for feature in name_feature.values(): + for feature in features: if feature['data_type'] == "numeric": idx = int(feature['index']) data[:, idx] = data[:, idx].astype(np.float) return data -def _determine_default_target(name_feature): +def _determine_default_target(features_dict): # determines the default target based on the data feature results # (which is currently more reliable than the data description; # see issue: https://github.com/openml/OpenML/issues/768) results = [] - for name, feature in name_feature.items(): + for name, feature in features_dict.items(): # note: string comparison (not boolean) if feature['is_target'] == "true": results.append(name) @@ -209,14 +209,14 @@ def _determine_default_target(name_feature): return results -def _determine_single_target_data_type(name_feature, target_column_name): +def _determine_single_target_data_type(features_dict, target_column_name): # determine the data type of the y array in case there is a single target if not isinstance(target_column_name, string_types): raise ValueError('target_column_name should be of string type, ' 'got: %s' % type(target_column_name)) - if target_column_name not in name_feature: + if target_column_name not in features_dict: raise KeyError('Could not find target_column_name={}') - feature = name_feature[target_column_name] + feature = features_dict[target_column_name] # note: we compare to a string, not boolean if feature['is_ignore'] == 'true': warn('target_column_name={} has flag is_ignore.'.format( @@ -231,7 +231,7 @@ def _determine_single_target_data_type(name_feature, target_column_name): return object -def _determine_multi_target_data_type(name_feature, target_column_names): +def _determine_multi_target_data_type(features_dict, target_column_names): # determine the data type of the y array in case there are multiple targets # (throws an error if these targets do not comply with sklearn support) if not isinstance(target_column_names, list): @@ -239,18 +239,18 @@ def _determine_multi_target_data_type(name_feature, target_column_names): 'got: %s' % type(target_column_names)) found_types = set() for target_column_name in target_column_names: - if target_column_name not in name_feature: + if target_column_name not in features_dict: raise KeyError('Could not find target_column_name={}') - if name_feature[target_column_name]['data_type'] == "numeric": + if features_dict[target_column_name]['data_type'] == "numeric": found_types.add(np.float64) else: found_types.add(object) # note: we compare to a string, not boolean - if name_feature[target_column_name]['is_ignore'] == 'true': + if features_dict[target_column_name]['is_ignore'] == 'true': warn('target_column_name={} has flag is_ignore.'.format( target_column_name)) - if name_feature[target_column_name]['is_row_identifier'] == 'true': + if features_dict[target_column_name]['is_row_identifier'] == 'true': warn('target_column_name={} has flag is_row_identifier.'.format( target_column_name)) if len(found_types) != 1: @@ -357,17 +357,18 @@ def mem(func): data_description['version'], data_description['name'])) # download data features, meta-info about column types - features = cached_get_data_features(data_id) - name_feature = {feature['name']: feature for feature in features} + features_list = cached_get_data_features(data_id) + features_dict = {feature['name']: feature for feature in features_list} + features_names = {feature['name'] for feature in features_list} if target_column_name == "default-target": - target_column_name = _determine_default_target(name_feature) + target_column_name = _determine_default_target(features_dict) # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous # and target at start or end, we could use a view instead. data_columns = [] - for feature in features: + for feature in features_list: # determine whether `feature` is a target if (isinstance(target_column_name, string_types) and feature['name'] == target_column_name): @@ -384,18 +385,18 @@ def mem(func): arff_data = cached_download_data_arff(data_description['file_id'])['data'] data = _convert_arff_data(arff_data) - data = _convert_numericals(data, name_feature) + data = _convert_numericals(data, features_list) if isinstance(target_column_name, string_types): # determine vector type - dtype = _determine_single_target_data_type(name_feature, + dtype = _determine_single_target_data_type(features_dict, target_column_name) - y = np.array(data[:, int(name_feature[target_column_name]['index'])], + y = np.array(data[:, int(features_dict[target_column_name]['index'])], dtype=dtype) elif isinstance(target_column_name, list): - dtype = _determine_multi_target_data_type(name_feature, + dtype = _determine_multi_target_data_type(features_dict, target_column_name) - indices = [int(name_feature[col_name]['index']) + indices = [int(features_dict[col_name]['index']) for col_name in target_column_name] y = np.array(data[:, indices], dtype=dtype) elif target_column_name is None: @@ -406,12 +407,12 @@ def mem(func): 'target_column_name of type {}'. format(type(target_column_name))) - if all([feature['data_type'] == "numeric" for feature in features + if all([feature['data_type'] == "numeric" for feature in features_list if feature['name'] in data_columns]): dtype = None else: dtype = object - col_slice = [int(name_feature[col_name]['index']) + col_slice = [int(features_dict[col_name]['index']) for col_name in data_columns] X = data[:, col_slice].astype(dtype) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index aa39baadbc5e5..7c100c49d56d5 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -46,6 +46,9 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, len(target_column_name)) assert data_by_id.data.dtype == exptected_data_dtype assert data_by_id.target.dtype == exptected_target_dtype + assert len(data_by_id.feature_names) == expected_features + for feature in data_by_id.feature_names: + assert isinstance(feature, string_types) if compare_default_target: # check whether the data by id and data by id target are equal From 73544da866ed915b267b0dec475d694d7536a232 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 17:58:42 -0400 Subject: [PATCH 099/138] typo fix --- sklearn/datasets/openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 7ff0ec76f96e6..5f3dacb8f6e87 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -421,7 +421,7 @@ def mem(func): bunch = Bunch( data=X, target=y, feature_names=data_columns, - DESCR=description, details=data_description, features=features, + DESCR=description, details=data_description, features=features_list, url="https://www.openml.org/d/{}".format(data_id)) return bunch From 887d3285fba863323fba99983a45d89657520511 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 18:00:52 -0400 Subject: [PATCH 100/138] removed sys import (for flake test) --- sklearn/datasets/openml.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 5f3dacb8f6e87..7013265d9b1cb 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -1,5 +1,4 @@ import json -import sys import os from os.path import join, exists from warnings import warn From 56f478e14589bc8ce2bff08efd9de15b793060e9 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 18:04:30 -0400 Subject: [PATCH 101/138] fix Travix fail --- sklearn/datasets/openml.py | 8 ++++---- sklearn/datasets/tests/test_openml.py | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 7013265d9b1cb..e4b8258053327 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -190,15 +190,15 @@ def _convert_numericals(data, features): return data -def _determine_default_target(features_dict): +def _determine_default_target(features_list): # determines the default target based on the data feature results # (which is currently more reliable than the data description; # see issue: https://github.com/openml/OpenML/issues/768) results = [] - for name, feature in features_dict.items(): + for feature in features_list: # note: string comparison (not boolean) if feature['is_target'] == "true": - results.append(name) + results.append(feature['name']) if len(results) == 0: return None @@ -361,7 +361,7 @@ def mem(func): features_names = {feature['name'] for feature in features_list} if target_column_name == "default-target": - target_column_name = _determine_default_target(features_dict) + target_column_name = _determine_default_target(features_list) # TODO: stacking the content of the structured array # this results in a copy. If the data was homogeneous diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 7c100c49d56d5..24be7ebe72bcd 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -86,8 +86,7 @@ def fetch_dataset_from_openml(data_id, data_name, data_version, def _determine_default_features(data_id, expected_default_target): # fetch features features = _get_data_features(data_id) - name_feature = {feature['name']: feature for feature in features} - default_target = _determine_default_target(name_feature) + default_target = _determine_default_target(features) assert expected_default_target == default_target From 1df22ebd7275581fe607d783ae0835d744b8ad04 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 18:38:43 -0400 Subject: [PATCH 102/138] make travis run again --- sklearn/datasets/tests/test_openml.py | 72 ++++++++++++++------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 24be7ebe72bcd..4cef6b76fff96 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -19,11 +19,15 @@ currdir = os.path.dirname(os.path.abspath(__file__)) -def fetch_dataset_from_openml(data_id, data_name, data_version, - target_column_name, - expected_observations, expected_features, - exptected_data_dtype, exptected_target_dtype, - expect_sparse, compare_default_target): +def _fetch_dataset_from_openml(data_id, data_name, data_version, + target_column_name, + expected_observations, expected_features, + exptected_data_dtype, exptected_target_dtype, + expect_sparse, compare_default_target): + # fetches a dataset in three various ways from OpenML, using the + # fetch_openml function, and does various checks on the validity of the + # result. Note that this function can be mocked (by invoking + # _monkey_patch_webbased_functions before invoking this function) data_by_name_id = fetch_openml(name=data_name, version=data_version, cache=False) assert int(data_by_name_id.details['id']) == data_id @@ -175,10 +179,10 @@ def test_fetch_openml_iris(monkeypatch): expected_features = 4 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, target_column, - expected_observations, expected_features, - np.float64, object, expect_sparse=False, - compare_default_target=True) + _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + np.float64, object, expect_sparse=False, + compare_default_target=True) _determine_default_features(data_id, target_column) @@ -192,10 +196,10 @@ def test_fetch_openml_iris_multitarget(monkeypatch): expected_features = 3 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, target_column, - expected_observations, expected_features, - object, np.float64, expect_sparse=False, - compare_default_target=False) + _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + object, np.float64, expect_sparse=False, + compare_default_target=False) def test_fetch_openml_anneal(monkeypatch): @@ -208,10 +212,10 @@ def test_fetch_openml_anneal(monkeypatch): expected_observations = 11 expected_features = 38 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, target_column, - expected_observations, expected_features, - object, object, expect_sparse=False, - compare_default_target=True) + _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + object, object, expect_sparse=False, + compare_default_target=True) _determine_default_features(data_id, target_column) @@ -225,10 +229,10 @@ def test_fetch_openml_anneal_multitarget(monkeypatch): expected_observations = 11 expected_features = 36 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, target_column, - expected_observations, expected_features, - object, object, expect_sparse=False, - compare_default_target=False) + _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + object, object, expect_sparse=False, + compare_default_target=False) def test_fetch_openml_cpu(monkeypatch): @@ -240,10 +244,10 @@ def test_fetch_openml_cpu(monkeypatch): expected_observations = 209 expected_features = 7 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, target_column, - expected_observations, expected_features, - object, np.float64, expect_sparse=False, - compare_default_target=True) + _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + object, np.float64, expect_sparse=False, + compare_default_target=True) _determine_default_features(data_id, target_column) @@ -263,7 +267,7 @@ def test_fetch_openml_australian(monkeypatch): assert_warns_message( UserWarning, "Version 1 of dataset Australian is inactive,", - fetch_dataset_from_openml, + _fetch_dataset_from_openml, **{'data_id': data_id, 'data_name': data_name, 'data_version': data_version, 'target_column_name': target_column, @@ -290,10 +294,10 @@ def test_fetch_openml_miceprotein(monkeypatch): expected_observations = 7 expected_features = 77 _monkey_patch_webbased_functions(monkeypatch, data_id) - fetch_dataset_from_openml(data_id, data_name, data_version, target_column, - expected_observations, expected_features, - np.float64, object, expect_sparse=False, - compare_default_target=True) + _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + np.float64, object, expect_sparse=False, + compare_default_target=True) _determine_default_features(data_id, target_column) @@ -309,10 +313,10 @@ def test_fetch_openml_emotions(monkeypatch): _monkey_patch_webbased_functions(monkeypatch, data_id) _determine_default_features(data_id, target_column) - fetch_dataset_from_openml(data_id, data_name, data_version, target_column, - expected_observations, expected_features, - np.float64, object, expect_sparse=False, - compare_default_target=True) + _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, + expected_observations, expected_features, + np.float64, object, expect_sparse=False, + compare_default_target=True) def test_fetch_openml_inactive(monkeypatch): From 8e42e093ad69dc4d74840ceb656025159f17e407 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Sat, 21 Jul 2018 18:43:49 -0400 Subject: [PATCH 103/138] removed unused variable --- sklearn/datasets/openml.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index e4b8258053327..351572e807d38 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -358,7 +358,6 @@ def mem(func): # download data features, meta-info about column types features_list = cached_get_data_features(data_id) features_dict = {feature['name']: feature for feature in features_list} - features_names = {feature['name'] for feature in features_list} if target_column_name == "default-target": target_column_name = _determine_default_target(features_list) From 96c627b40822064b022eac8114b68eb0a1d8b8b1 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 23 Jul 2018 13:00:52 -0400 Subject: [PATCH 104/138] incorporated comments by Joel --- sklearn/datasets/openml.py | 10 ---------- .../tests/mock_openml/2/anneal_1_active.json.gz | Bin 312 -> 0 bytes .../mock_openml/2/anneal_None_active.json.gz | Bin 315 -> 0 bytes .../datasets/tests/mock_openml/2/data.arff.gz | Bin 1841 -> 0 bytes .../tests/mock_openml/2/data_description.json.gz | Bin 1362 -> 0 bytes .../tests/mock_openml/2/data_features.json.gz | Bin 666 -> 0 bytes .../mock_openml/292/australian_1_active.json.gz | Bin 99 -> 0 bytes .../292/australian_1_deactivated.json.gz | Bin 325 -> 0 bytes .../292/australian_None_active.json.gz | Bin 376 -> 0 bytes .../datasets/tests/mock_openml/292/data.arff.gz | Bin 2532 -> 0 bytes .../mock_openml/292/data_description.json.gz | Bin 547 -> 0 bytes .../tests/mock_openml/292/data_features.json.gz | Bin 286 -> 0 bytes .../tests/mock_openml/40675/data.arff.gz | Bin 3000 -> 0 bytes .../mock_openml/40675/data_description.json.gz | Bin 323 -> 0 bytes .../mock_openml/40675/data_features.json.gz | Bin 288 -> 0 bytes .../mock_openml/40675/glass2_1_active.json.gz | Bin 85 -> 0 bytes .../40675/glass2_1_deactivated.json.gz | Bin 296 -> 0 bytes .../mock_openml/40675/glass2_None_active.json.gz | Bin 88 -> 0 bytes .../tests/mock_openml/40966/data.arff.gz | Bin 6471 -> 0 bytes .../mock_openml/40966/data_description.json.gz | Bin 1659 -> 0 bytes .../mock_openml/40966/data_features.json.gz | Bin 920 -> 0 bytes .../40966/miceprotein_4_active.json.gz | Bin 308 -> 0 bytes .../40966/miceprotein_None_active.json.gz | Bin 311 -> 0 bytes .../tests/mock_openml/561/cpu_1_active.json.gz | Bin 299 -> 0 bytes .../mock_openml/561/cpu_None_active.json.gz | Bin 348 -> 0 bytes .../datasets/tests/mock_openml/561/data.arff.gz | Bin 3303 -> 0 bytes .../mock_openml/561/data_description.json.gz | Bin 1798 -> 0 bytes .../tests/mock_openml/561/data_features.json.gz | Bin 262 -> 0 bytes .../datasets/tests/mock_openml/61/data.arff.gz | Bin 2342 -> 0 bytes .../mock_openml/61/data_description.json.gz | Bin 898 -> 0 bytes .../tests/mock_openml/61/data_features.json.gz | Bin 210 -> 0 bytes .../tests/mock_openml/61/iris_1_active.json.gz | Bin 291 -> 0 bytes .../mock_openml/61/iris_None_active.json.gz | Bin 333 -> 0 bytes sklearn/datasets/tests/test_openml.py | 4 ++-- 34 files changed, 2 insertions(+), 12 deletions(-) delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/anneal_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/2/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/australian_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/australian_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/292/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40675/glass2_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/miceprotein_4_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/cpu_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/cpu_None_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/561/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/data.arff.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/data_description.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/data_features.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/iris_1_active.json.gz delete mode 100644 sklearn/datasets/tests/mock_openml/61/iris_None_active.json.gz diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 351572e807d38..801a2f52ea538 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -181,15 +181,6 @@ def _download_data_arff(file_id): return arff_file -def _convert_numericals(data, features): - # converts all numerical columns in the numpy array into floats - for feature in features: - if feature['data_type'] == "numeric": - idx = int(feature['index']) - data[:, idx] = data[:, idx].astype(np.float) - return data - - def _determine_default_target(features_list): # determines the default target based on the data feature results # (which is currently more reliable than the data description; @@ -383,7 +374,6 @@ def mem(func): arff_data = cached_download_data_arff(data_description['file_id'])['data'] data = _convert_arff_data(arff_data) - data = _convert_numericals(data, features_list) if isinstance(target_column_name, string_types): # determine vector type diff --git a/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz b/sklearn/datasets/tests/mock_openml/2/anneal_1_active.json.gz deleted file mode 100644 index d19e4a633740c061891efc24e7c449cf710b876f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmV-80muFyiwFoC!BATO17U7%WnpYzF<)V0bZK^FE^2dcZUBvuK~KU!5QWe5SCBmu zV_V%8Zv@lC1DHsn2V=}o796wP#@#6qN&masF5rQd_0rw#)mHHI=IWX?W<467rN8H8 zfePe==pGHB%IUdDnlnz)PeJ9GA??l1t70ki=6coZL21*H#%$ZxE4VKFKp)(8tRi>@W3Af@Y6oXJsO^+ zzvpFv3gm?79u1+&>A6XoGfvV^LFJht?aj`sVkz|Fy3KZUz4azDVb`lWqVd?9eNgu2 zsJtVbj{P&A(l1CKGc*R(re}Ho!CfXqQJDCbVNank@7)Ra5*E8+S;`BDI6gAo0{5wd N`WIgV4X!u?000i`l==Vw diff --git a/sklearn/datasets/tests/mock_openml/2/data.arff.gz b/sklearn/datasets/tests/mock_openml/2/data.arff.gz deleted file mode 100644 index cdf3254add760d126b36ffa0e1d1a8b571d29daa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1841 zcmV-12hR8(iwFoC!BATO17u-zVJ=~EW@Z4bSle>jI1+u&S9DEPO1o7c!;3^pdhz%k zPsX0CWG7?4q(BO^xTZ)g0ovo*+JE21MHETFlS%C|CS-RXG`bHO=vLl?@4{^^3I&7lDSizoYDSE4*3LnRT^FOu) zEzQzbz#G10sQ|IgIlNE~14QvC<_I z@x+CjW|Od5l6+NiLCci!ImEN621H%Ju@H5hG(sZ6X&ZS2X(efFs)iS@&ND3{9|C30xWkZa)`{6&=IikOes=cjObfCQI^_d@)!| zhm_Wd-0Sw)vtU5T?wZ!Cl5swN6NC&4w%M}!TU`}0JLhuMTcbrbaKq z5L4tsa+KsnE(|FS@ku~JGA0v)n#tH|Rz8aLo38kti#t*}nEcueZR*Bok$B$J8BLj! z#Lq0dN*WAwpZ|F4E>XB=`y&dCKa6#GaqE9r(69d{3$^^x2p?d}3T_w72!YLdOF zMLHAlrWWZ;UOsGC7jV*v0m)2?H)kV>n}Kq#4UoNbT~|HCX{$x{w(E-brhjg=$X$xb zwCbw&mXWm$t)Fwd7TIEdY(-($B3l`&>&mW;WO~(g&#S#wvV{lpLsI9DYw_V3FQN}= z!Du(>Pw;?zA^SLy!J?6=Hn&+s2LIXARkpEdLu8P@$!{nbd|NBCZ%wzoojv{S>Q@5G zkLTy+IEBb0-hSy*7d1QvArktMuQ~_C20~s7R`&fl03p3qKFBAB-0zN5C<(55Q~`MS z5N{%fNDgu288lM6rRkG8o957HO`7 zTEHsjY0bpGz#STwV61L0veKatXu=uRB3X85J73THyD47C$F+8(Q!&0M%X3)fk7b_a z=!GhcKOOy~7jKcs*1odkyV3_HG{^yc&ne~ zT%RlKQ{;g<)mPH)z^gyuhU&^|YdLqwZt(J%?i9g5-YUYLJn~w_xIbfe()!0wP1z~# z`igMeURb@yaU8qCw9P-)*x)E8sQR|z{Cv)zm7)0=3fg9lml!X;&`#72hv|S-QO) z0p8_BPqAxhEvkMatCqYSn%#A?O1m@;{XRf-I$DME5fk7W;ycE7auA~KZ7n|SJ6dJw zW;nCg(kjSj#f%+hI$MQ1L)AYp5Dbkxi_93E99}HL7{FYEkm^t^nXH;piyZq(jG^V0t|1ZQR+9Y@F{#KfG}^KZpKCvzf9xo=!cS(0BNM%88Kp zli>fGXxd#r42C@HoelBx<}cXo^WbZv!%X{ecL#emJQwfbm*>SC7K{to?8!TTGl5?Z fn=(~j5V6by#~X&p>x)+ZdbkIub1`ndPU z{$3}gj!rFi)0A6gMB#*1oe})l-`nem6kDBshxiXgbM8N>Qk=@VZ^4bN@tvsd*=Fe+ z9i5jh)8^=C1P|&->7@$cjaJn06p|IZp$n11*l{C;ngdlSd^U6i7o~DSae#?BIvVTJ zFzzY7K3v{@d!0E~*wLgr=~BZovEZR#HY}M4d0I}oxtw(UtZ-6x(mk)jMe;)kAUZqi z)tq;dBLJ9i|Bo04P(Qh8p`~D}Fmt&)^pq2IpK;Je%!Q&7)^4E*1!hL)fNnzYK>nRF z2RWz8WAqFhcFs6;rQx>Hfk|pDwuJ>r&78{>l+OyT*$D`RERIT9n)#|4n4`ExP-($3 z!4>1gb5O{T9h|{;&K0&Y{G<}GwsKx%D=Qd=?m4VRQjw#3mhrsmE{ra?aRU1=T)K7x zPGbCA|iba3%>A_{TjBl|Y=q(_ti1~Od|CTJRg>9H zE6SO;omP}HS>nCI+lY(SBv8#n?i`LP=D!#>);`L|GQ4xzh|9GVWFQPr3=-vYDH77t|=c zlJP2UZ~O~9B%jD;swko?{dOC@M2aH*T^c>hU$PERM7vYsffsSN)$hQJ7F&yZ`RDB) z1jaXS-!?~TfMU8#u%|Za*P}2%O_w5V9hR3sD6QmbJD%S_sIV5lY^i{Jc|KMHud&{e z3ZRD%=^gu5>|ZBwuR)`<1!Ygw`D_kOZE2F%nr3~b$b$#epdhGH;X!Z!3yKSiNeYtz z=0!ZOnC%Xfc2imum}mXXy$0dsopIyymujvPfP-9Ei(yP_%mKWvvlw2B3KCwYJuEpW zCR0AgOp*$$Q@G=6hTq9O*k*d^6NpccG_gLL*4giQd_C?ktgD|oJ@~@s{NvSC-B%V; z({zeuKvh2Vd(klH;V-`L4@S}1s6VW6I89IQF?VHxU(IkMeb=TmSuU3$W@44gP@8#O z>flj`u!XgO_ciH8aU7qX#8}5vg+fTpY}Q05B%juGT?2Zq+h(+sZt8rgfwDj6JP)iE zbF1K+;*H5=tL$@hj$dCp)|KgMik9B$f!cKc-09=7l&y;eK+Z7jb!-)iT=iu$7V zo{N@9SOvJ!R@Eui9t&Rg=IQYi%NO=!%iPkpHd^-j-{UOYUB Uqt5=`&;6hO0e4b}%oPg&0G9@#9smFU diff --git a/sklearn/datasets/tests/mock_openml/2/data_features.json.gz b/sklearn/datasets/tests/mock_openml/2/data_features.json.gz deleted file mode 100644 index f3c520472f9496aec35b783a2cb48bc1d4929a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 666 zcmV;L0%iRliwFoC!BATO17u-zVP9rtVRUtJWpgfSb8l_{)tTFln=lZDual=(A@y!o zN^r`d573vWDrAfS@A^Oolk94hcP~j(Rhlrj&2SZrG5W_D&o?uCZZ}CIqpVsj;{7$~E|aGmkN887W^%8XT% z(CPSRksbBF3DfxidSL>>sWOfB(X>Vbe!x$z)=-7Ea%LQj@2aD;)76M1&(man==}VI z^zV`W0YWpW_;OXv&5GT!4Joo=j9OcE;)`rqy+G=fggW>|`IFON6sx^IAoab3#_Mrh zi~g@jf7EW6Ujf0|c|AKP%Cr5l9U1nb;2RSS;Yg1(LF~k`2{{g>0i3LjHIZLD75ie@ zh~h35f%aYO*K!_8q~8bsB0J6UER=*J?J< z^t^&ftg|$4}Dm!4j#MxL|&a@ z1gp6?YxwD>B2S9J>m(cvKmC;Zrx>{UeTe)*Pf-%peTtdeYJk8`e@5*;#;ytg{N$7F za|hme$&B6_OxMTx;wZt-Kgw#!uT(BdDyU)_+v!qh@-yH-q!TG7^6LblWr#J>u`rf7 zGL6tK?vT79?RO<{FW1wl7MRAdH|lLsJ;UCRz$`wQW<8xPfk|xjYP#$KQ#crgIglW7 zP;m$0z>rnc)??HTQoV6(hmu`Hfmy4pBtFp4`XfyLWBY$@H|Op7H;jwdjEEfo0BLwp Au>b%7 diff --git a/sklearn/datasets/tests/mock_openml/292/australian_1_active.json.gz b/sklearn/datasets/tests/mock_openml/292/australian_1_active.json.gz deleted file mode 100644 index 0e2c4395f1c234118fd039f2d0598f2ab41ea61b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99 zcmV-p0G$6HiwFo_u}fP317US@baG*AX<=?(F<)V0bZK^FE^2dcZUC$1;#5j4D#|ZX zvQnt#;^b6H&QD1NvXzX@jg)ji0=cQh#fj-)F~59;qSWHjoRVTCF3wu6S^#i2H9kE6 F000vLD#!o; diff --git a/sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json.gz b/sklearn/datasets/tests/mock_openml/292/australian_1_deactivated.json.gz deleted file mode 100644 index 5ee200d7c056b7e92c841a8d8c6404f4198a2c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmV-L0lNMliwFo%m`hs#17US@baG*AX<=?(F<)e5VPkY@c42g7WG-rRZ*BmkkwH&` zKoEt`A)xGc0t{@gMZ#hFUou+&CR-@ z|CHO3v9zZ)N6_(UFMF-+kJ9N8_$>5)Pv0Xy&yfiAQ^)!G&Hl^Vw=|e`Ut`*9k!mcEgn7hsJ!YEM~ZwmL<0Z-S2~-{ diff --git a/sklearn/datasets/tests/mock_openml/292/australian_None_active.json.gz b/sklearn/datasets/tests/mock_openml/292/australian_None_active.json.gz deleted file mode 100644 index 08d319727fb520503628d3c6307955884517a066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmV-;0f+t{iwFp@nM+#$17US@baG*AX<=?(PH%2yUtwc(X?A5UYIARH0Hu&!Yr-%T zhOh0f2)WvzNUPIX?_?l2a07+yVhoAx(VmeeE=dbc{O>z$b%UwvV7*Ar*YlpY*?EjU zzKC^}fpUDv_iml3Q>vJVFA}Z zg-n|SObKla6r{|uTsquHV6omH*f#gQ7Ego|v~%aR>exbQ;ib%}fC(kE)UQ${GAR9x za_fwcC={<72M^S{sSDN#m)ml-c669qX_JZS7e}-4_*g^CrxkAd z<>q_;RJ>_Jtve~Ko#V$ro_q+IR}e64)6eMADO!ta{ZtB^$~BAqm!}&H#us0s->5L(W=k!9 Wk%*2GuU>uZz5OR-F&Y7H0{{RFM6fFW diff --git a/sklearn/datasets/tests/mock_openml/292/data.arff.gz b/sklearn/datasets/tests/mock_openml/292/data.arff.gz deleted file mode 100644 index 6821829e1e43a250e8dee84c85287a55a2291ac0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2532 zcmVT;|acZ3%k5;(l0M(_}cEkn$I=cSEo-kJHsY5`}cqU$?E@osZYD7`p}%&51*Un z%bVA)UtV5r)A!QX&d*P`5A~0*-7lxzr`@62w_-lS&L8Xgzz$K~e)l^Fxj*hNPluNs z9HqLyKb{_Thfl0ICdrS-{r>n87fu)0^-VnABdfaKu;ZcCs;PE|GrX(WbG5(J><3so zH`SqGk9E~tPW6x1YzKPn_Inl$2fP1XpN_0LJb;+XnVssV<1?J)^Js@xMnxvPrUf6V28^SM8o}PRg$ZUT-D^NAy+NA>c~}3 zt_E^daC({6PSENJT0b!;c=h(DcX#iu{@`H7YbF@{k?e-wIvuoA?wYCiPI#fEx7WKJ69S9lMRw&LV9F-+%+e7tT2Q=OFtg3s=I)pgQ3u zisiT5*&r47Q?bE&ErlqFy~%RDZUqZUq>(D{;5(7t!R|VJx}PXELqIN_EJ5!LAc(+8h$yr7mOTDJ#(*> z+E_xc@sj&sC)N%+yE#~|3C)9YS}WU~A;305tGTbiMEM9YCas?zA!sgxH`61`{hjrP z14}LX2vgDMs?$G-c5deE9*YoFT484;wHLB?w6R@wE#gQ3+$;*c zndz#noZEMdVAf^1#fn}uG%lxu%B~DzUTY&n@7q*OWmtxjwv_A5wOmM4)dW@6!0KFa zQ3~@V^KY!|IK)Gc6q>6L-QPPuBxIRo`6%LqH^CBR#-%Lt(<8Vc3?RNq`ebZZDW|}? z;EhcY80*|X-g*m6qQ&D0HpRbhh9l}mfVdVWsL-<(=R3t$k<^>+;4}Rl7dj^1D8jS# zt%6!llo_A~Lb^V~1tt?kWP>ULKU+QmN_1q2K*3F{7pY8lM;7bg3XAa+n_8Ciu(Gmbe;G4N2LV`x!!PG*D!aN}89 zo;t-1p{G<#zV)hlP4z6avqgbhi~^o}=Ll*+x*B0x&`MJERYJ$2%oN*G&X>ZC=N_Xs z{&Lz`js5KiA0TK$EGL(r-~}+0V{#5 zmIrWk9tJ_D+=ZB!Hl@SNZC%$iGU9rk$t{5PQ5EbK^qSDqW$^F|WHAqkbEGdzOA{rO`EWB}%Xc4UK8W;POU=oOKjPhWJsLRr=8zOu%bp0Ol-cpmEsECsy zgK0noZL94!=h)DeN!*tCDSV6uy(1{i#BHrNLxaa)XS{LL9z{h(9=es)E;4s&>N`|4 zGegf*m!U(KnLV%dNNE7JURvDP&6C3Bg3&&U%XrQRHGa6J{Y%#wL&;vC$gO$%+JOcR<&Z+&T`U_2 zur-*yi9N69fzEK5C864YA$;@$9fq{5R2Nf*x2G^UeAhcr{k6VS3 zzAjJPm*WfH?FB*Qu@sRy>kSNcbF&a1a4W_%5Akuo>ElR?$+SKjz{73y{M{?|_va69 u*oXSuu;XKT1UNnVdb%9$tMnZ5@f07py|3A+uFl89`S$-Y(|E+*EC2xdp!${o diff --git a/sklearn/datasets/tests/mock_openml/292/data_description.json.gz b/sklearn/datasets/tests/mock_openml/292/data_description.json.gz deleted file mode 100644 index 888140f92b36025bdaf00eba9eeb917fd9c3964e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I!{iwFp5lS^9w17u-zVP9lrb7OL8aCB*JZZ2wbZ*BlpQca87Fc3W_ze2b- zvxzOmP7~j9StzuyG~0zz6(h@XELN6`J`%Re{`X2&S|^~xo0+GXHy`iIMbZ*WYQt>Z zGD9^VEmtzB!25EsNOV&heyg9yn0|3i3Ju0Uu3*jH~RjP{wD}ZuXtRP&$B66MtBZdLW?L-VtET4OB zfPc1Upd*8F2F&U}=*_qG05r3jvomXNvvyhy(?=1N7@v8K|nF^q*Bh;_JcAsDEjuGp0V89{{stZ+Yn9*@0+OYcY{qZq| zsP=57r`Y|>u5l#YJYJcG1j$jcd(o>%4fVO zW?bCxOElxp$?tg9-0+4AZr_50@n$f_@57nkZ5i<^IQs#&F*LMgO?yUPjT-`?fn~Wb lXonao_C?u1RKVSKvukKcQMrN1a`CbJ_zTS2bE$~~005Kz4Z;8b diff --git a/sklearn/datasets/tests/mock_openml/292/data_features.json.gz b/sklearn/datasets/tests/mock_openml/292/data_features.json.gz deleted file mode 100644 index 5a7138dd9d6a105b56cfc180f0d6af5fb75abf87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 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 diff --git a/sklearn/datasets/tests/mock_openml/40675/data_description.json.gz b/sklearn/datasets/tests/mock_openml/40675/data_description.json.gz deleted file mode 100644 index 42b876f0a4723653c6cb004a8e54e432ec995450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmV-J0lfYniwFovwM$z717u-zVP9lrb7OL8aCB*JZZ2wbZ*Blxkh^ZfFbqX!`zs2~ zO)Oh}Al|y<1B#9Y3|fywi2Q&=$0&mQd!@)7+KoEABJbrRO^5)5-bw6*blmC%^*oXG z?U5!4(ZW}xq;*q~_W&jsWk44L&J~f}rFHQS$s_qYX%`=s(G0P#W;+6g*2m}h9ND^< z8AR{hycQHRZw|CP(E2Mc+MKl&i#nsZocK$#tb>2;->nJginzG8%erjaw&T3WX*9># zUb-yA?6Q0At9hHkt}ZK2byZZf%c8?0SfzG{+Q@!SA4R{(6s!h&1bgu(14OHbHCpCj z$bJ&-^q`H#@Bcm>0N Vsv5-Kz-mHqY6ejN{RfWc3?}ZQ-Nz_Uawe>Q`X}pj8t4N^kVP5C_JwrDI p8JU>}T?#zqtE=bd!~XH_C(*8;Ztr5RuBlnsj3RkYqxBgW7yu)}A3gv8 diff --git a/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json.gz b/sklearn/datasets/tests/mock_openml/40675/glass2_1_deactivated.json.gz deleted file mode 100644 index 2f48ea985b4c919414b26c75e4f3a909fa37554a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmV+@0oVQ?iwFp(w@X_917~bub8|9ZF<)e5VPkY@c42g7WG-rRZ*BmkkikmBKoEw{ z%~O;;7fGT?tTzz?9;#qL4dS(d7oRh*y4usY03SL>91(56*kUg!Kh sLpKE(nVAP&3OwbjtLNv#{_*c8(XOCw?_#g6sae^KB6&}v^%)o#0FuWbod5s; diff --git a/sklearn/datasets/tests/mock_openml/40966/data.arff.gz b/sklearn/datasets/tests/mock_openml/40966/data.arff.gz deleted file mode 100644 index 43ec977bf67acca1421e65a62f1c6b699de94ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6471 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 JkqQ#he*izqRiOX? diff --git a/sklearn/datasets/tests/mock_openml/40966/data_description.json.gz b/sklearn/datasets/tests/mock_openml/40966/data_description.json.gz deleted file mode 100644 index 02b25d717f925451397d3e7903768be470cc2f95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1659 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 G0ssKk`;FQF diff --git a/sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json.gz b/sklearn/datasets/tests/mock_openml/40966/miceprotein_None_active.json.gz deleted file mode 100644 index 712545f0b72d59e3cf5b8d2338bfe45b4cedadd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmV-70m%LziwFpnyGvUD18r$zWpHwDbY*F7UrujsWnW=qbZK^FE^2dcZUBXmO-lnY z5Qfj)Ur}-{l3m>|Zz3#ssEP$Wh?I0Y)sbw1Nw!eS{&$m2E#h{YOOkmr&pVUJKAMm< zGmKnM_tC_kH5ePdy4VW1w!sxGvuxH2f;C_jGRGPol{A2Y_?s;#jZ(ODFKEL|t6egy z4Q}C(w~?x0t^~Pxs;XZRIV}5Hab6}xmQb&MwTz?L9UJ=70Q;26Ufpu0^#Z>S_O=hk z+dd;s=>;WD>}J#dG>Q;S(^2}qZC0QjHa!h`z!pKW0y`UZ3QdCSov@P?^$9qp#rTs4 z_zRkkIckmK{n<$X+(V66V&|-IWn#k=L? z<#W*9z_}L}m)%Y&6-e$i%Re29&XOC8T6wc7u>|C7D1w}D$*a1BHWETG8$D#%#zeti zV~5_LKaA#=1A(;K&hXcD3?JI~UpE4*o#IcG?S}y2%8Ik@dCG!UblN-c_e4unAVx&D zXbDwLj{&qhG5xeT2G#L1Oq`r?bH6Czn!X318TacoHSE=1^iKJ=QF#s9ONWQkPe|`$ xv=-G{!}^-Hw+TCy_g`)>Z(PP;Z^CpXXIlIdv3-h{BpyXl`~qE$Tz4-6001vRkRt#9 diff --git a/sklearn/datasets/tests/mock_openml/561/cpu_None_active.json.gz b/sklearn/datasets/tests/mock_openml/561/cpu_None_active.json.gz deleted file mode 100644 index 4436afa6bc760a05f49a8702dc24171e37fd0f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmV-i0i*sOiwFn^mrGj!17mP?UrujsWnW=qbZK^FE^2dcZUF65O;3YB6g-z-(d@Yz zU;~J^MnmGEHL-~vjA^!XtIsTp?nh&7`0p+sZDR^TiisC5EHk{B_wtt6S_8BsilEEk z)*6)Wk}3lqb8HA$8sPcPsDPX#)L<09X;d<6DkP-bkX4CPL}{59kyyc+R&}dXBqTRR zg1QwgG+3fW@TSne1`)+1^@sugrxES diff --git a/sklearn/datasets/tests/mock_openml/561/data.arff.gz b/sklearn/datasets/tests/mock_openml/561/data.arff.gz deleted file mode 100644 index eeb088c224a01f55aacecc6ffec3b9fea8470b0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3303 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 diff --git a/sklearn/datasets/tests/mock_openml/561/data_features.json.gz b/sklearn/datasets/tests/mock_openml/561/data_features.json.gz deleted file mode 100644 index d159bbd8570d83e743701614d788c87895956a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 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 diff --git a/sklearn/datasets/tests/mock_openml/61/data_features.json.gz b/sklearn/datasets/tests/mock_openml/61/data_features.json.gz deleted file mode 100644 index c436e322fc7d2a5b4ce9e4c462436e5dc588985a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmV;@04@I?iwFn~c0*eL17u-zVP9rtVRUtJWpgfSb8l_{&Ct0D!!Qhh;djxTq1TjG zDaEL<>DF57t|u9cEfjvaPcnSGEnE?KIOmhdHlR(Q`nzQb{WRM_tD8 M4N@FztRe#d03w%OQUCw| diff --git a/sklearn/datasets/tests/mock_openml/61/iris_1_active.json.gz b/sklearn/datasets/tests/mock_openml/61/iris_1_active.json.gz deleted file mode 100644 index 6dd5e202aeccc497d38128d2e38adf9c45f24688..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmV+;0o?u{iwFqUu}fP318H(;b6+uEVPkY@c4aPVb8l_{rIAfb!$1&*&&{tWdoI$T z_28{20S~QUK@TD_O}FjHW*2uR#ai;;oy|u@+BAM#virU}&pX3p7xmNv7}QmN7xk(; zX%_huv>3P$aTyOvWg*id6?!C9SsU#MofWsPAqLJVR6)wP(RJO@`3yp^8s8^LW1`V7 z-#WbIV34=_0ls=p;MI9~x;8*G!;d;xCIFL{6{F$VPzA3T^bg?osmsuU88hD?G1`%wNB5op{qv}&c#V4ew1*a+l005@~hUWkP diff --git a/sklearn/datasets/tests/mock_openml/61/iris_None_active.json.gz b/sklearn/datasets/tests/mock_openml/61/iris_None_active.json.gz deleted file mode 100644 index b1824cde71fe22eba689f9b31d6adef8a14d3f9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmV-T0kZxdiwFqiu}fP318H(;b6-wxZe?F#V{~bDWiD!SZ*BnXQ^88ZKoC7QUs3j4 zB{8N@Z$$}sXax&;5Rq-V)sf8xcP7PJ^6yU4q($18Y6Lxa$>zPC_hy*ot(=aSNs{8M zyK*|~e^kWqF2_v3j6vV)70Ad~F%)0{#hO|ui;x&*%Nis}Ddtr&B3P)hZl2g!=Eh=p z9flPNT0MN|@RCXmwA>7^?KzUqiRG(vEfFX1RvPmJQl~{l;2ygo=dxaRNBlZYVlYw< zi7o&MOhh-i5O-|+dKWO?A7PxvQ)RE_h4@QtD`lv7vv!X(Xp~+Weijq$(Rv4ryiwl* zJ&gbn%wx^+n$6nk`BWC7+GU(JI!u=FG|`_}c$LMyv-K&XFz62s$b#P{3xOZFe)~9h f?$6}m$ori@ocsskZw7)tnUlQ(ag(I&I|cv%)C-(T diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 4cef6b76fff96..ffcd36dc9c564 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -114,7 +114,7 @@ def _mock_urlopen_data_description(url): return read_fn(path, 'rb') def _mock_urlopen_data_features(url): - assert (url.startswith(url_prefix_data_features)) + assert url.startswith(url_prefix_data_features) path = os.path.join(currdir, 'data', 'openml', str(data_id), 'data_features.json%s' % path_suffix) @@ -131,7 +131,7 @@ def _mock_urlopen_data_list(url): # url contains key value pairs of attributes, e.g., # openml.org/api/v1/json/data_name/iris/data_version/1 should # ideally become {data_name: 'iris', data_version: '1'} - assert(url.startswith(url_prefix_data_list)) + assert url.startswith(url_prefix_data_list) att_list = url[len(url_prefix_data_list):].split('/') key_val_dict = dict(zip(att_list[::2], att_list[1::2])) # add defaults, so we can make assumptions about the content From e6fe403410638b5bd265d4ef032fb6116e72d6ee Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 23 Jul 2018 13:02:37 -0400 Subject: [PATCH 105/138] incorporated last comment --- sklearn/datasets/tests/test_openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index ffcd36dc9c564..4e4ebd3c92894 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -107,7 +107,7 @@ def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): read_fn = gzip.open def _mock_urlopen_data_description(url): - assert (url.startswith(url_prefix_data_description)) + assert url.startswith(url_prefix_data_description) path = os.path.join(currdir, 'data', 'openml', str(data_id), 'data_description.json%s' % path_suffix) From c08065b860e43f0a0fd7b69de09972c1d653a98c Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 23 Jul 2018 17:06:31 -0400 Subject: [PATCH 106/138] sparse data support --- sklearn/datasets/openml.py | 159 +++++++++++++++++++++----- sklearn/datasets/tests/test_openml.py | 24 +++- 2 files changed, 150 insertions(+), 33 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 801a2f52ea538..22d0956cd5865 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -12,6 +12,7 @@ import numpy as np +import scipy.sparse from sklearn.externals import arff from .base import get_data_home @@ -76,10 +77,57 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error): return json_data -def _convert_arff_data(arff_data): +def _split_sparse_columns(arff_data, include_columns): """ - converts the arff object into the appropriate matrix type (now: np.ndarray, - later also: scipy.sparse.csr_matrix) based on the 'data part' (i.e., in the + obtains several columns from sparse arff representation. Additionally, the + column indices are re-labelled, given the columns that are not included. + (e.g., when including [1, 2, 3], the columns will be relabelled to + [0, 1, 2]) + + Parameters + ---------- + arff_data : tuple + A tuple of three lists of equal size; first list indicating the value, + second the x coordinate and the third the y coordinate. + + include_columns : list + A list of columns to include. + + Returns + ------- + arff_data_new : tuple + Subset of arff data with only the include columns indicated by the + include_columns argument. + """ + arff_data_new = (list(), list(), list()) + reindexed_columns = {column_idx: array_idx for array_idx, column_idx + in enumerate(include_columns)} + for val, row_idx, col_idx in zip(arff_data[0], arff_data[1], arff_data[2]): + if col_idx in include_columns: + arff_data_new[0].append(val) + arff_data_new[1].append(row_idx) + arff_data_new[2].append(reindexed_columns[col_idx]) + return arff_data_new + + +def _sparse_data_to_array(arff_data, dtype, include_columns): + # turns the sparse data back into an array (can't use toarray() function, + # as this does only work on numeric data) + num_obs = max(arff_data[1]) + 1 + y_shape = (num_obs, len(include_columns)) + reindexed_columns = {column_idx: array_idx for array_idx, column_idx + in enumerate(include_columns)} + y = np.empty(y_shape, dtype=dtype) + for val, row_idx, col_idx in zip(arff_data[0], arff_data[1], arff_data[2]): + if col_idx in include_columns: + y[row_idx, reindexed_columns[col_idx]] = val + return y + + +def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): + """ + converts the arff object into the appropriate matrix type (np.array or + scipy.sparse.csr_matrix) based on the 'data part' (i.e., in the liac-arff dict, the object from the 'data' key) Parameters @@ -87,18 +135,57 @@ def _convert_arff_data(arff_data): arff_data : list or dict as obtained from liac-arff object + dtype_x : type + The data type in which the X data should be returned. Preferred: + np.float64 or object + + col_slice_x : list + The column indices that are sliced from the original array to return + as X data + + type_y : type + The data type in which the y data should be returned. Preferred: + np.float64 or object + + col_slice_y : int or list + The column indices that are sliced from the original array to return + as y data + Returns ------- - X : np.array - (or later also: scipy.sparse.csr_matrix) + X : np.array or scipy.sparse.csr_matrix + y : np.array """ if isinstance(arff_data, list): - X = np.array(arff_data, dtype=object) - # elif: extendable for sparse arff in future () + data = np.array(arff_data, dtype=object) + X = np.array(data[:, col_slice_x], dtype=dtype_x) + if dtype_y is not None: + y = np.array(data[:, col_slice_y], dtype=dtype_y) + else: + y = None + return X, y + elif isinstance(arff_data, tuple): + if dtype_x is not np.float64: + raise ValueError('sparse array only allowed for numeric columns') + arff_data_X = _split_sparse_columns(arff_data, col_slice_x) + num_obs = max(arff_data[1]) + 1 + X_shape = (num_obs, len(col_slice_x)) + X = scipy.sparse.coo_matrix( + (arff_data_X[0], (arff_data_X[1], arff_data_X[2])), + shape=X_shape, dtype=dtype_x) + X = X.tocsr() + if dtype_y is not None: + if isinstance(col_slice_y, list): + y = _sparse_data_to_array(arff_data, dtype_y, col_slice_y) + else: + y = _sparse_data_to_array(arff_data, dtype_y, + [col_slice_y])[:, 0] + else: + y = None + return X, y else: # This should never happen raise ValueError('Unexpected Data Type obtained from arff.') - return X def _get_data_info_by_name(name, version): @@ -166,16 +253,22 @@ def _get_data_features(data_id): return json_data['data_features']['feature'] -def _download_data_arff(file_id): +def _download_data_arff(file_id, sparse): # Accesses an ARFF file on the OpenML server. Documentation: # https://www.openml.org/api_data_docs#!/data/get_download_id url = _DATA_FILE.format(file_id) response = urlopen(url) + kwargs = {} + if sparse is True: + kwargs['return_type'] = arff.COO + else: + kwargs['return_type'] = arff.DENSE + if PY2: # Because Python2.7 numpy can't handle unicode - arff_file = arff.loads(response.read()) + arff_file = arff.loads(response.read(), **kwargs) else: - arff_file = arff.loads(response.read().decode('utf-8')) + arff_file = arff.loads(response.read().decode('utf-8'), **kwargs) response.close() return arff_file @@ -372,23 +465,20 @@ def mem(func): feature['is_row_identifier'] == 'false'): data_columns.append(feature['name']) - arff_data = cached_download_data_arff(data_description['file_id'])['data'] - data = _convert_arff_data(arff_data) - + # prepare which columns and data types should be returned for the X and y if isinstance(target_column_name, string_types): # determine vector type - dtype = _determine_single_target_data_type(features_dict, - target_column_name) - y = np.array(data[:, int(features_dict[target_column_name]['index'])], - dtype=dtype) + dtype_y = _determine_single_target_data_type(features_dict, + target_column_name) + col_slice_y = int(features_dict[target_column_name]['index']) elif isinstance(target_column_name, list): - dtype = _determine_multi_target_data_type(features_dict, - target_column_name) - indices = [int(features_dict[col_name]['index']) - for col_name in target_column_name] - y = np.array(data[:, indices], dtype=dtype) + dtype_y = _determine_multi_target_data_type(features_dict, + target_column_name) + col_slice_y = [int(features_dict[col_name]['index']) + for col_name in target_column_name] elif target_column_name is None: - y = None + dtype_y = None + col_slice_y = None else: # unexpected behaviour, this should never happen raise ValueError('Could not determine how to handle ' @@ -397,12 +487,23 @@ def mem(func): if all([feature['data_type'] == "numeric" for feature in features_list if feature['name'] in data_columns]): - dtype = None + dtype_x = np.float64 else: - dtype = object - col_slice = [int(features_dict[col_name]['index']) - for col_name in data_columns] - X = data[:, col_slice].astype(dtype) + dtype_x = object + + col_slice_x = [int(features_dict[col_name]['index']) + for col_name in data_columns] + + # determine arff encoding to return + return_sparse = False + if data_description['format'].lower() == 'sparse_arff': + return_sparse = True + + # obtain the data + arff_data = cached_download_data_arff(data_description['file_id'], + return_sparse)['data'] + X, y = _convert_arff_data(arff_data, dtype_x, col_slice_x, + dtype_y, col_slice_y) description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 4e4ebd3c92894..0a30363601b18 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -81,8 +81,11 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, if feature_name_type[feature_name] == 'numeric': # check that all elements in an object array are numeric # cf. https://stackoverflow.com/a/19486803/1791279 - assert np.issubdtype(np.array(list(data_by_id.data[:, idx])).dtype, - np.number) + if isinstance(data_by_id.data, scipy.sparse.csr_matrix): + dtype = np.array(list(data_by_id.data[:, idx].toarray())).dtype + else: + dtype = np.array(list(data_by_id.data[:, idx])).dtype + assert np.issubdtype(dtype, np.number) return data_by_id @@ -273,10 +276,10 @@ def test_fetch_openml_australian(monkeypatch): 'target_column_name': target_column, 'expected_observations': expected_observations, 'expected_features': expected_features, - 'expect_sparse': False, + 'expect_sparse': True, 'exptected_data_dtype': np.float64, 'exptected_target_dtype': object, - 'compare_default_target': True} + 'compare_default_target': False} # numpy specific check ) _determine_default_features(data_id, target_column) @@ -319,6 +322,19 @@ def test_fetch_openml_emotions(monkeypatch): compare_default_target=True) +def test_fetch_openml_notarget(monkeypatch): + data_id = 61 + target_column = None + expected_observations = 150 + expected_features = 5 + + _monkey_patch_webbased_functions(monkeypatch, data_id) + data = fetch_openml(data_id=data_id, target_column_name=target_column, + cache=False) + assert data.data.shape == (expected_observations, expected_features) + assert data.target is None + + def test_fetch_openml_inactive(monkeypatch): # fetch inactive dataset by id data_id = 40675 From 94f86c14817f9ada56f46c2c2f4b9b69ac4a1383 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 24 Jul 2018 13:12:31 -0400 Subject: [PATCH 107/138] comments by Joel --- sklearn/datasets/openml.py | 87 ++++++++++++--------------- sklearn/datasets/tests/test_openml.py | 14 ++--- 2 files changed, 47 insertions(+), 54 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 801a2f52ea538..3dd2d109e157e 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -121,7 +121,7 @@ def _get_data_info_by_name(name, version): Returns ------- - json_data['data']['dataset'][0]: json + first_dataset : json json representation of the first dataset object that adhired to the search criteria @@ -152,7 +152,7 @@ def _get_data_info_by_name(name, version): def _get_data_description_by_id(data_id): # OpenML API function: https://www.openml.org/api_docs#!/data/get_data_id url = _DATA_INFO.format(data_id) - error_message = "Dataset with id {} not found.".format(data_id) + error_message = "Dataset with data_id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True) return json_data['data_set_description'] @@ -161,7 +161,7 @@ def _get_data_features(data_id): # OpenML function: # https://www.openml.org/api_docs#!/data/get_data_features_id url = _DATA_FEATURES.format(data_id) - error_message = "Dataset with id {} not found.".format(data_id) + error_message = "Dataset with data_id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True) return json_data['data_features']['feature'] @@ -185,11 +185,8 @@ def _determine_default_target(features_list): # determines the default target based on the data feature results # (which is currently more reliable than the data description; # see issue: https://github.com/openml/OpenML/issues/768) - results = [] - for feature in features_list: - # note: string comparison (not boolean) - if feature['is_target'] == "true": - results.append(feature['name']) + results = [feature['name'] + for feature in features_list if feature['is_target'] == 'true'] if len(results) == 0: return None @@ -208,12 +205,11 @@ def _determine_single_target_data_type(features_dict, target_column_name): raise KeyError('Could not find target_column_name={}') feature = features_dict[target_column_name] # note: we compare to a string, not boolean - if feature['is_ignore'] == 'true': - warn('target_column_name={} has flag is_ignore.'.format( - target_column_name)) - if feature['is_row_identifier'] == 'true': - warn('target_column_name={} has flag is_row_identifier.'.format( - target_column_name)) + + for dict_key in ['is_ignore', 'is_row_identifier']: + if feature[dict_key] == 'true': + warn('target_column_name={} has flag {}.'.format( + target_column_name, dict_key)) if feature['data_type'] == "numeric": return np.float64 @@ -256,7 +252,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, Datasets are uniquely identified by either an integer ID or by a combination of name and version (i.e. there might be multiple - versions of the 'iris' dataset). Please give either name or id + versions of the 'iris' dataset). Please give either name or data_id (not both). In case a name is given, a version can also be provided. @@ -295,10 +291,12 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, data : Bunch Dictionary-like object, the interesting attributes are: - 'data', the data to learn, 'target', the regression target or - classification labels, 'DESCR', the full description of the dataset, - 'feature_names', the original names of the dataset columns, and - 'details' which provide more information on the openml meta-data. + 'data' (np.array), the data to learn, 'target' (np.array), the + regression target or classification labels, 'DESCR' (str), the full + description of the dataset, 'feature_names' (list), the original names + of the dataset columns, and 'details' (json) which provide more + information on the openml meta-data. Missing values in the 'data' and + 'target' field are represented as NaN's. """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') @@ -342,9 +340,12 @@ def mem(func): data_description = cached_get_data_description_by_id(data_id) if data_description['status'] != "active": - warn("Version {} of dataset {} is inactive, meaning that issues have" - " been found in the dataset. Try using a newer version.".format( - data_description['version'], data_description['name'])) + warn("Version {} of dataset {} is inactive, meaning that issues have " + "been found in the dataset. Try using a newer version from " + "this URL: {}".format( + data_description['version'], + data_description['name'], + data_description['url'])) # download data features, meta-info about column types features_list = cached_get_data_features(data_id) @@ -353,35 +354,23 @@ def mem(func): if target_column_name == "default-target": target_column_name = _determine_default_target(features_list) - # TODO: stacking the content of the structured array - # this results in a copy. If the data was homogeneous - # and target at start or end, we could use a view instead. - data_columns = [] - for feature in features_list: - # determine whether `feature` is a target - if (isinstance(target_column_name, string_types) and - feature['name'] == target_column_name): - is_target = True - elif (isinstance(target_column_name, list) and - feature['name'] in target_column_name): - is_target = True - else: - is_target = False - - if ((not is_target) and feature['is_ignore'] == 'false' and - feature['is_row_identifier'] == 'false'): - data_columns.append(feature['name']) + # for code-simplicity, make target_column_name by default a list + if isinstance(target_column_name, string_types): + target_column_name = [target_column_name] + elif not isinstance(target_column_name, list) \ + and target_column_name is not None: + raise TypeError("Did not recognize type of target_column_name" + "Should be six.string_type, list or None. Got: " + "{}".format(type(target_column_name))) + data_columns = [feature['name'] for feature in features_list + if (feature['name'] not in target_column_name and + feature['is_ignore'] != 'true' and + feature['is_row_identifier'] != 'true')] arff_data = cached_download_data_arff(data_description['file_id'])['data'] data = _convert_arff_data(arff_data) - if isinstance(target_column_name, string_types): - # determine vector type - dtype = _determine_single_target_data_type(features_dict, - target_column_name) - y = np.array(data[:, int(features_dict[target_column_name]['index'])], - dtype=dtype) - elif isinstance(target_column_name, list): + if isinstance(target_column_name, list): dtype = _determine_multi_target_data_type(features_dict, target_column_name) indices = [int(features_dict[col_name]['index']) @@ -407,6 +396,10 @@ def mem(func): description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) + # reshape y back to 1-D array, if there is only 1 target column + if y.shape[1] == 1: + y = y.reshape((-1,)) + bunch = Bunch( data=X, target=y, feature_names=data_columns, DESCR=description, details=data_description, features=features_list, diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 4e4ebd3c92894..2efef6bd5e347 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -87,7 +87,7 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, return data_by_id -def _determine_default_features(data_id, expected_default_target): +def _verify_default_features(data_id, expected_default_target): # fetch features features = _get_data_features(data_id) default_target = _determine_default_target(features) @@ -183,7 +183,7 @@ def test_fetch_openml_iris(monkeypatch): expected_observations, expected_features, np.float64, object, expect_sparse=False, compare_default_target=True) - _determine_default_features(data_id, target_column) + _verify_default_features(data_id, target_column) def test_fetch_openml_iris_multitarget(monkeypatch): @@ -216,7 +216,7 @@ def test_fetch_openml_anneal(monkeypatch): expected_observations, expected_features, object, object, expect_sparse=False, compare_default_target=True) - _determine_default_features(data_id, target_column) + _verify_default_features(data_id, target_column) def test_fetch_openml_anneal_multitarget(monkeypatch): @@ -248,7 +248,7 @@ def test_fetch_openml_cpu(monkeypatch): expected_observations, expected_features, object, np.float64, expect_sparse=False, compare_default_target=True) - _determine_default_features(data_id, target_column) + _verify_default_features(data_id, target_column) def test_fetch_openml_australian(monkeypatch): @@ -278,7 +278,7 @@ def test_fetch_openml_australian(monkeypatch): 'exptected_target_dtype': object, 'compare_default_target': True} ) - _determine_default_features(data_id, target_column) + _verify_default_features(data_id, target_column) def test_fetch_openml_miceprotein(monkeypatch): @@ -298,7 +298,7 @@ def test_fetch_openml_miceprotein(monkeypatch): expected_observations, expected_features, np.float64, object, expect_sparse=False, compare_default_target=True) - _determine_default_features(data_id, target_column) + _verify_default_features(data_id, target_column) def test_fetch_openml_emotions(monkeypatch): @@ -312,7 +312,7 @@ def test_fetch_openml_emotions(monkeypatch): expected_features = 72 _monkey_patch_webbased_functions(monkeypatch, data_id) - _determine_default_features(data_id, target_column) + _verify_default_features(data_id, target_column) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, np.float64, object, expect_sparse=False, From 546c4b08420e9fecf1af65c0814f3476ec36d19b Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 24 Jul 2018 13:42:22 -0400 Subject: [PATCH 108/138] resolved merge errors --- sklearn/datasets/openml.py | 47 +++++++++++++------------------------- 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 4d85ddba36c8d..a20a084c9264b 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -147,7 +147,7 @@ def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): The data type in which the y data should be returned. Preferred: np.float64 or object - col_slice_y : int or list + col_slice_y : list The column indices that are sliced from the original array to return as y data @@ -159,10 +159,7 @@ def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): if isinstance(arff_data, list): data = np.array(arff_data, dtype=object) X = np.array(data[:, col_slice_x], dtype=dtype_x) - if dtype_y is not None: - y = np.array(data[:, col_slice_y], dtype=dtype_y) - else: - y = None + y = np.array(data[:, col_slice_y], dtype=dtype_y) return X, y elif isinstance(arff_data, tuple): if dtype_x is not np.float64: @@ -174,14 +171,7 @@ def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): (arff_data_X[0], (arff_data_X[1], arff_data_X[2])), shape=X_shape, dtype=dtype_x) X = X.tocsr() - if dtype_y is not None: - if isinstance(col_slice_y, list): - y = _sparse_data_to_array(arff_data, dtype_y, col_slice_y) - else: - y = _sparse_data_to_array(arff_data, dtype_y, - [col_slice_y])[:, 0] - else: - y = None + y = _sparse_data_to_array(arff_data, dtype_y, col_slice_y) return X, y else: # This should never happen @@ -332,11 +322,11 @@ def _determine_multi_target_data_type(features_dict, target_column_names): if features_dict[target_column_name]['is_row_identifier'] == 'true': warn('target_column_name={} has flag is_row_identifier.'.format( target_column_name)) - if len(found_types) != 1: + if len(found_types) > 1: raise ValueError('Can only handle homogeneous multi-target datasets, ' 'i.e., all targets are either numeric or ' 'categorical.') - return list(found_types)[0] + return list(found_types)[0] if len(found_types) > 0 else None def fetch_openml(name=None, version='active', data_id=None, data_home=None, @@ -450,8 +440,9 @@ def mem(func): # for code-simplicity, make target_column_name by default a list if isinstance(target_column_name, string_types): target_column_name = [target_column_name] - elif not isinstance(target_column_name, list) \ - and target_column_name is not None: + elif target_column_name is None: + target_column_name = [] + elif not isinstance(target_column_name, list): raise TypeError("Did not recognize type of target_column_name" "Should be six.string_type, list or None. Got: " "{}".format(type(target_column_name))) @@ -461,19 +452,10 @@ def mem(func): feature['is_row_identifier'] != 'true')] # prepare which columns and data types should be returned for the X and y - if isinstance(target_column_name, list): - dtype_y = _determine_multi_target_data_type(features_dict, - target_column_name) - col_slice_y = [int(features_dict[col_name]['index']) - for col_name in target_column_name] - elif target_column_name is None: - dtype_y = None - col_slice_y = None - else: - # unexpected behaviour, this should never happen - raise ValueError('Could not determine how to handle ' - 'target_column_name of type {}'. - format(type(target_column_name))) + dtype_y = _determine_multi_target_data_type(features_dict, + target_column_name) + col_slice_y = [int(features_dict[col_name]['index']) + for col_name in target_column_name] if all([feature['data_type'] == "numeric" for feature in features_list if feature['name'] in data_columns]): @@ -498,9 +480,12 @@ def mem(func): description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) - # reshape y back to 1-D array, if there is only 1 target column + # reshape y back to 1-D array, if there is only 1 target column; back + # to None if there are not target columns if y.shape[1] == 1: y = y.reshape((-1,)) + elif y.shape[1] == 0: + y = None bunch = Bunch( data=X, target=y, feature_names=data_columns, From 30662b4820d002f3124a2be77e9085e5e18c71fd Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 24 Jul 2018 14:09:55 -0400 Subject: [PATCH 109/138] fixes flake8 error --- sklearn/datasets/openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index a20a084c9264b..08434e9f980ea 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -450,7 +450,7 @@ def mem(func): if (feature['name'] not in target_column_name and feature['is_ignore'] != 'true' and feature['is_row_identifier'] != 'true')] - + # prepare which columns and data types should be returned for the X and y dtype_y = _determine_multi_target_data_type(features_dict, target_column_name) From 8d02af24b7cff802a15f4b0bc82195f48708e4e3 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 24 Jul 2018 20:02:14 -0400 Subject: [PATCH 110/138] comments by Joel --- sklearn/datasets/openml.py | 69 +++++++++------------------ sklearn/datasets/tests/test_openml.py | 16 +------ 2 files changed, 23 insertions(+), 62 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 08434e9f980ea..9c9e665df461d 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -264,43 +264,7 @@ def _download_data_arff(file_id, sparse): return arff_file -def _determine_default_target(features_list): - # determines the default target based on the data feature results - # (which is currently more reliable than the data description; - # see issue: https://github.com/openml/OpenML/issues/768) - results = [feature['name'] - for feature in features_list if feature['is_target'] == 'true'] - - if len(results) == 0: - return None - elif len(results) == 1: - return results[0] - else: - return results - - -def _determine_single_target_data_type(features_dict, target_column_name): - # determine the data type of the y array in case there is a single target - if not isinstance(target_column_name, string_types): - raise ValueError('target_column_name should be of string type, ' - 'got: %s' % type(target_column_name)) - if target_column_name not in features_dict: - raise KeyError('Could not find target_column_name={}') - feature = features_dict[target_column_name] - # note: we compare to a string, not boolean - - for dict_key in ['is_ignore', 'is_row_identifier']: - if feature[dict_key] == 'true': - warn('target_column_name={} has flag {}.'.format( - target_column_name, dict_key)) - - if feature['data_type'] == "numeric": - return np.float64 - else: - return object - - -def _determine_multi_target_data_type(features_dict, target_column_names): +def _determine_target_data_type(features_dict, target_column_names): # determine the data type of the y array in case there are multiple targets # (throws an error if these targets do not comply with sklearn support) if not isinstance(target_column_names, list): @@ -374,12 +338,19 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, data : Bunch Dictionary-like object, the interesting attributes are: - 'data' (np.array), the data to learn, 'target' (np.array), the - regression target or classification labels, 'DESCR' (str), the full - description of the dataset, 'feature_names' (list), the original names - of the dataset columns, and 'details' (json) which provide more - information on the openml meta-data. Missing values in the 'data' and - 'target' field are represented as NaN's. + data : np.array + the data to learn + target : np.array + the regression target or classification labels + DESCR : str + the full description of the dataset + feature_names : list + the original names of the dataset columns + details : json + more information on the openml meta-data. + + Missing values in the 'data' and 'target' field are represented as + NaN's. """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') @@ -432,10 +403,13 @@ def mem(func): # download data features, meta-info about column types features_list = cached_get_data_features(data_id) - features_dict = {feature['name']: feature for feature in features_list} if target_column_name == "default-target": - target_column_name = _determine_default_target(features_list) + # determines the default target based on the data feature results + # (which is currently more reliable than the data description; + # see issue: https://github.com/openml/OpenML/issues/768) + target_column_name = [feature['name'] for feature in features_list + if feature['is_target'] == 'true'] # for code-simplicity, make target_column_name by default a list if isinstance(target_column_name, string_types): @@ -452,8 +426,9 @@ def mem(func): feature['is_row_identifier'] != 'true')] # prepare which columns and data types should be returned for the X and y - dtype_y = _determine_multi_target_data_type(features_dict, - target_column_name) + features_dict = {feature['name']: feature for feature in features_list} + dtype_y = _determine_target_data_type(features_dict, + target_column_name) col_slice_y = [int(features_dict[col_name]['index']) for col_name in target_column_name] diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 90e532dcb52b5..42c624954c1e7 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -8,8 +8,7 @@ import sklearn from sklearn.datasets import fetch_openml -from sklearn.datasets.openml import _get_data_features, \ - _determine_default_target +from sklearn.datasets.openml import _get_data_features from sklearn.utils.testing import (assert_warns_message, assert_raise_message) from sklearn.externals.six import string_types @@ -90,13 +89,6 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, return data_by_id -def _verify_default_features(data_id, expected_default_target): - # fetch features - features = _get_data_features(data_id) - default_target = _determine_default_target(features) - assert expected_default_target == default_target - - def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): url_prefix_data_description = "https://openml.org/api/v1/json/data/" url_prefix_data_features = "https://openml.org/api/v1/json/data/features/" @@ -186,7 +178,6 @@ def test_fetch_openml_iris(monkeypatch): expected_observations, expected_features, np.float64, object, expect_sparse=False, compare_default_target=True) - _verify_default_features(data_id, target_column) def test_fetch_openml_iris_multitarget(monkeypatch): @@ -219,7 +210,6 @@ def test_fetch_openml_anneal(monkeypatch): expected_observations, expected_features, object, object, expect_sparse=False, compare_default_target=True) - _verify_default_features(data_id, target_column) def test_fetch_openml_anneal_multitarget(monkeypatch): @@ -251,7 +241,6 @@ def test_fetch_openml_cpu(monkeypatch): expected_observations, expected_features, object, np.float64, expect_sparse=False, compare_default_target=True) - _verify_default_features(data_id, target_column) def test_fetch_openml_australian(monkeypatch): @@ -281,7 +270,6 @@ def test_fetch_openml_australian(monkeypatch): 'exptected_target_dtype': object, 'compare_default_target': False} # numpy specific check ) - _verify_default_features(data_id, target_column) def test_fetch_openml_miceprotein(monkeypatch): @@ -301,7 +289,6 @@ def test_fetch_openml_miceprotein(monkeypatch): expected_observations, expected_features, np.float64, object, expect_sparse=False, compare_default_target=True) - _verify_default_features(data_id, target_column) def test_fetch_openml_emotions(monkeypatch): @@ -315,7 +302,6 @@ def test_fetch_openml_emotions(monkeypatch): expected_features = 72 _monkey_patch_webbased_functions(monkeypatch, data_id) - _verify_default_features(data_id, target_column) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, np.float64, object, expect_sparse=False, From 197685bde084a551690af0a30194c48f82471613 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 24 Jul 2018 22:19:21 -0400 Subject: [PATCH 111/138] changed arff.loads to arff.load --- sklearn/datasets/openml.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 9c9e665df461d..33e46603dc5a8 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -16,7 +16,7 @@ from sklearn.externals import arff from .base import get_data_home -from ..externals.six import string_types, PY2 +from ..externals.six import string_types from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch, Memory @@ -248,18 +248,12 @@ def _download_data_arff(file_id, sparse): # https://www.openml.org/api_data_docs#!/data/get_download_id url = _DATA_FILE.format(file_id) response = urlopen(url) - kwargs = {} if sparse is True: - kwargs['return_type'] = arff.COO + return_type = arff.COO else: - kwargs['return_type'] = arff.DENSE - - if PY2: - # Because Python2.7 numpy can't handle unicode - arff_file = arff.loads(response.read(), **kwargs) - else: - arff_file = arff.loads(response.read().decode('utf-8'), **kwargs) + return_type = arff.DENSE + arff_file = arff.load(response, return_type=return_type) response.close() return arff_file From 8d9d7dc4883331a19e8585a598f8f2595e71fca2 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 24 Jul 2018 22:48:18 -0400 Subject: [PATCH 112/138] reverted loads for PY3 --- sklearn/datasets/openml.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 33e46603dc5a8..b6fe6369b0c11 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -16,7 +16,7 @@ from sklearn.externals import arff from .base import get_data_home -from ..externals.six import string_types +from ..externals.six import string_types, PY2 from ..externals.six.moves.urllib.error import HTTPError from ..utils import Bunch, Memory @@ -253,7 +253,11 @@ def _download_data_arff(file_id, sparse): else: return_type = arff.DENSE - arff_file = arff.load(response, return_type=return_type) + if PY2: + arff_file = arff.load(response, return_type=return_type) + else: + arff_file = arff.loads(response.read().decode('utf-8'), + return_type=return_type) response.close() return arff_file From 5218c67ef92fdec77a0010fcfc7d2975e6f0f8bc Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 24 Jul 2018 23:04:32 -0400 Subject: [PATCH 113/138] implemented caching as recommended by Joel --- sklearn/datasets/openml.py | 80 ++++++++++++++++----------- sklearn/datasets/tests/test_openml.py | 4 +- 2 files changed, 49 insertions(+), 35 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index b6fe6369b0c11..515fdb67360c5 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -22,14 +22,32 @@ __all__ = ['fetch_openml'] - -_SEARCH_NAME = "https://openml.org/api/v1/json/data/list/data_name/{}/limit/1" -_DATA_INFO = "https://openml.org/api/v1/json/data/{}" -_DATA_FEATURES = "https://openml.org/api/v1/json/data/features/{}" -_DATA_FILE = "https://openml.org/data/v1/download/{}" - - -def _get_json_content_from_openml_api(url, error_message, raise_if_error): +_OPENML_PREFIX = "https://openml.org/" +_SEARCH_NAME = "api/v1/json/data/list/data_name/{}/limit/1" +_DATA_INFO = "api/v1/json/data/{}" +_DATA_FEATURES = "api/v1/json/data/features/{}" +_DATA_FILE = "data/v1/download/{}" + + +def _open_openml_url(path, data_home, cache): + if not cache: + return urlopen(_OPENML_PREFIX + path) + local_path = os.path.join(data_home, 'openml.org', path) + if not os.path.exists(local_path): + os.path.mkdir(os.path.dirname(local_path), parents=True, exist_ok=True) + try: + with gzip.GzipFile(local_path, 'wb') as fdst: + with urlopen(_OPENML_PREFIX + path) as fsrc: + shutil.copyfileobj(fsrc, fdst) + except Exception: + os.unlink(local_path) + raise + # XXX: unnecessary decompression on first access + return gzip.GzipFile(local_path, 'rb') + + +def _get_json_content_from_openml_api(url, error_message, raise_if_error, + data_home, cache): """ Loads json data from the openml api @@ -58,7 +76,7 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error): """ data_found = True try: - response = urlopen(url) + response = _open_openml_url(url, data_home, cache) except HTTPError as error: # 412 is an OpenML specific error code, indicating a generic error # (e.g., data not found) @@ -178,7 +196,7 @@ def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): raise ValueError('Unexpected Data Type obtained from arff.') -def _get_data_info_by_name(name, version): +def _get_data_info_by_name(name, version, data_home, cache): """ Utilizes the openml dataset listing api to find a dataset by name/version @@ -207,12 +225,14 @@ def _get_data_info_by_name(name, version): # situation in which we return the oldest active version url = _SEARCH_NAME.format(name) + "/status/active/" error_msg = "No active dataset {} found.".format(name) - json_data = _get_json_content_from_openml_api(url, error_msg, True) + json_data = _get_json_content_from_openml_api(url, error_msg, True, + data_home, cache) return json_data['data']['dataset'][0] # an integer version has been provided url = (_SEARCH_NAME + "/data_version/{}").format(name, version) - json_data = _get_json_content_from_openml_api(url, None, False) + json_data = _get_json_content_from_openml_api(url, None, False, + data_home, cache) if json_data is None: # we can do this in 1 function call if OpenML does not require the # specification of the dataset status (i.e., return datasets with a @@ -221,33 +241,36 @@ def _get_data_info_by_name(name, version): url += "/status/deactivated" error_msg = "Dataset {} with version {} not found.".format(name, version) - json_data = _get_json_content_from_openml_api(url, error_msg, True) + json_data = _get_json_content_from_openml_api(url, error_msg, True, + data_home, cache) return json_data['data']['dataset'][0] -def _get_data_description_by_id(data_id): +def _get_data_description_by_id(data_id, data_home, cache): # OpenML API function: https://www.openml.org/api_docs#!/data/get_data_id url = _DATA_INFO.format(data_id) error_message = "Dataset with data_id {} not found.".format(data_id) - json_data = _get_json_content_from_openml_api(url, error_message, True) + json_data = _get_json_content_from_openml_api(url, error_message, True, + data_home, cache) return json_data['data_set_description'] -def _get_data_features(data_id): +def _get_data_features(data_id, data_home, cache): # OpenML function: # https://www.openml.org/api_docs#!/data/get_data_features_id url = _DATA_FEATURES.format(data_id) error_message = "Dataset with data_id {} not found.".format(data_id) - json_data = _get_json_content_from_openml_api(url, error_message, True) + json_data = _get_json_content_from_openml_api(url, error_message, True, + data_home, cache) return json_data['data_features']['feature'] -def _download_data_arff(file_id, sparse): +def _download_data_arff(file_id, sparse, data_home, cache): # Accesses an ARFF file on the OpenML server. Documentation: # https://www.openml.org/api_data_docs#!/data/get_download_id url = _DATA_FILE.format(file_id) - response = urlopen(url) + response = _open_openml_url(url, data_home, cache) if sparse is True: return_type = arff.COO else: @@ -352,15 +375,6 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') - if cache: - mem = Memory(join(data_home, 'cache'), verbose=0).cache - else: - def mem(func): - return func - cached_get_data_info_by_name = mem(_get_data_info_by_name) - cached_get_data_description_by_id = mem(_get_data_description_by_id) - cached_get_data_features = mem(_get_data_features) - cached_download_data_arff = mem(_download_data_arff) if not exists(data_home): os.makedirs(data_home) @@ -376,7 +390,7 @@ def mem(func): "Dataset data_id={} and name={} passed, but you can only " "specify a numeric data_id or a name, not " "both.".format(data_id, name)) - data_info = cached_get_data_info_by_name(name, version) + data_info = _get_data_info_by_name(name, version, data_home, cache) data_id = data_info['did'] elif data_id is not None: # from the previous if statement, it is given that name is None @@ -390,7 +404,7 @@ def mem(func): "Neither name nor data_id are provided. Please provide name or " "data_id.") - data_description = cached_get_data_description_by_id(data_id) + data_description = _get_data_description_by_id(data_id, data_home, cache) if data_description['status'] != "active": warn("Version {} of dataset {} is inactive, meaning that issues have " "been found in the dataset. Try using a newer version from " @@ -400,7 +414,7 @@ def mem(func): data_description['url'])) # download data features, meta-info about column types - features_list = cached_get_data_features(data_id) + features_list = _get_data_features(data_id, data_home, cache) if target_column_name == "default-target": # determines the default target based on the data feature results @@ -445,8 +459,8 @@ def mem(func): return_sparse = True # obtain the data - arff_data = cached_download_data_arff(data_description['file_id'], - return_sparse)['data'] + arff_data = _download_data_arff(data_description['file_id'], return_sparse, + data_home, cache)['data'] X, y = _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 42c624954c1e7..a50b953765963 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -74,8 +74,8 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, # check numeric features. Note that the response of _get_data_features is # mocked too. - feature_name_type = {feature['name']: feature['data_type'] - for feature in _get_data_features(data_id)} + feature_name_type = {feature['name']: feature['data_type'] for feature + in _get_data_features(data_id, None, False)} for idx, feature_name in enumerate(data_by_id.feature_names): if feature_name_type[feature_name] == 'numeric': # check that all elements in an object array are numeric From 857042f79403f8a429aa55e8086385a8b2e5f9c7 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 24 Jul 2018 23:59:46 -0400 Subject: [PATCH 114/138] changed function signature, better testing for cache and small bugfixes --- sklearn/datasets/openml.py | 87 +++++++++++++++++++-------- sklearn/datasets/tests/test_openml.py | 27 ++++++++- 2 files changed, 85 insertions(+), 29 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 515fdb67360c5..a11ba37e1a4e0 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -1,5 +1,7 @@ +import gzip import json import os +import shutil from os.path import join, exists from warnings import warn @@ -29,17 +31,41 @@ _DATA_FILE = "data/v1/download/{}" -def _open_openml_url(path, data_home, cache): - if not cache: - return urlopen(_OPENML_PREFIX + path) - local_path = os.path.join(data_home, 'openml.org', path) +def _open_openml_url(openml_path, data_home): + """ + Returns a resource from OpenML.org. Caches it to data_home if required. + + Parameters + ---------- + openml_path : str + OpenML URL that will be accessed. This will be prefixes with + _OPENML_PREFIX + + data_home : str + Directory to which the files will be cached. If None, no caching will + be applied. + + Returns + ------- + result : stream + A stream to the OpenML resource + """ + if data_home is None: + return urlopen(_OPENML_PREFIX + openml_path) + local_path = os.path.join(data_home, 'openml.org', str(hash(openml_path))) if not os.path.exists(local_path): - os.path.mkdir(os.path.dirname(local_path), parents=True, exist_ok=True) + try: + os.mkdir(os.path.dirname(local_path)) + except OSError: + # potentially, the directory has been created in the meantime by + # a different process + pass + try: with gzip.GzipFile(local_path, 'wb') as fdst: - with urlopen(_OPENML_PREFIX + path) as fsrc: + with urlopen(_OPENML_PREFIX + openml_path) as fsrc: shutil.copyfileobj(fsrc, fdst) - except Exception: + except Exception as e: os.unlink(local_path) raise # XXX: unnecessary decompression on first access @@ -47,7 +73,7 @@ def _open_openml_url(path, data_home, cache): def _get_json_content_from_openml_api(url, error_message, raise_if_error, - data_home, cache): + data_home): """ Loads json data from the openml api @@ -67,6 +93,9 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error, in case of acceptable errors. Note that all other errors (e.g., 404) will still be raised as normal. + data_home : str or None + Location to cache the response. None if no cache is required. + Returns ------- json_data : json or None @@ -76,7 +105,7 @@ def _get_json_content_from_openml_api(url, error_message, raise_if_error, """ data_found = True try: - response = _open_openml_url(url, data_home, cache) + response = _open_openml_url(url, data_home) except HTTPError as error: # 412 is an OpenML specific error code, indicating a generic error # (e.g., data not found) @@ -196,7 +225,7 @@ def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): raise ValueError('Unexpected Data Type obtained from arff.') -def _get_data_info_by_name(name, version, data_home, cache): +def _get_data_info_by_name(name, version, data_home): """ Utilizes the openml dataset listing api to find a dataset by name/version @@ -214,6 +243,9 @@ def _get_data_info_by_name(name, version, data_home, cache): version from OpenML that is annotated as active. Any other string values except "active" are treated as integer. + data_home : str or None + Location to cache the response. None if no cache is required. + Returns ------- first_dataset : json @@ -226,13 +258,13 @@ def _get_data_info_by_name(name, version, data_home, cache): url = _SEARCH_NAME.format(name) + "/status/active/" error_msg = "No active dataset {} found.".format(name) json_data = _get_json_content_from_openml_api(url, error_msg, True, - data_home, cache) + data_home) return json_data['data']['dataset'][0] # an integer version has been provided url = (_SEARCH_NAME + "/data_version/{}").format(name, version) json_data = _get_json_content_from_openml_api(url, None, False, - data_home, cache) + data_home) if json_data is None: # we can do this in 1 function call if OpenML does not require the # specification of the dataset status (i.e., return datasets with a @@ -242,35 +274,35 @@ def _get_data_info_by_name(name, version, data_home, cache): error_msg = "Dataset {} with version {} not found.".format(name, version) json_data = _get_json_content_from_openml_api(url, error_msg, True, - data_home, cache) + data_home) return json_data['data']['dataset'][0] -def _get_data_description_by_id(data_id, data_home, cache): +def _get_data_description_by_id(data_id, data_home): # OpenML API function: https://www.openml.org/api_docs#!/data/get_data_id url = _DATA_INFO.format(data_id) error_message = "Dataset with data_id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True, - data_home, cache) + data_home) return json_data['data_set_description'] -def _get_data_features(data_id, data_home, cache): +def _get_data_features(data_id, data_home): # OpenML function: # https://www.openml.org/api_docs#!/data/get_data_features_id url = _DATA_FEATURES.format(data_id) error_message = "Dataset with data_id {} not found.".format(data_id) json_data = _get_json_content_from_openml_api(url, error_message, True, - data_home, cache) + data_home) return json_data['data_features']['feature'] -def _download_data_arff(file_id, sparse, data_home, cache): +def _download_data_arff(file_id, sparse, data_home): # Accesses an ARFF file on the OpenML server. Documentation: # https://www.openml.org/api_data_docs#!/data/get_download_id url = _DATA_FILE.format(file_id) - response = _open_openml_url(url, data_home, cache) + response = _open_openml_url(url, data_home) if sparse is True: return_type = arff.COO else: @@ -375,9 +407,12 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') - - if not exists(data_home): - os.makedirs(data_home) + if cache is False: + # no caching will be applied + data_home = None + else: + if not exists(data_home): + os.makedirs(data_home) # check valid function arguments. data_id XOR (name, version) should be # provided @@ -390,7 +425,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, "Dataset data_id={} and name={} passed, but you can only " "specify a numeric data_id or a name, not " "both.".format(data_id, name)) - data_info = _get_data_info_by_name(name, version, data_home, cache) + data_info = _get_data_info_by_name(name, version, data_home) data_id = data_info['did'] elif data_id is not None: # from the previous if statement, it is given that name is None @@ -404,7 +439,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, "Neither name nor data_id are provided. Please provide name or " "data_id.") - data_description = _get_data_description_by_id(data_id, data_home, cache) + data_description = _get_data_description_by_id(data_id, data_home) if data_description['status'] != "active": warn("Version {} of dataset {} is inactive, meaning that issues have " "been found in the dataset. Try using a newer version from " @@ -414,7 +449,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, data_description['url'])) # download data features, meta-info about column types - features_list = _get_data_features(data_id, data_home, cache) + features_list = _get_data_features(data_id, data_home) if target_column_name == "default-target": # determines the default target based on the data feature results @@ -460,7 +495,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, # obtain the data arff_data = _download_data_arff(data_description['file_id'], return_sparse, - data_home, cache)['data'] + data_home)['data'] X, y = _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index a50b953765963..148257468bf4e 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -8,7 +8,7 @@ import sklearn from sklearn.datasets import fetch_openml -from sklearn.datasets.openml import _get_data_features +from sklearn.datasets.openml import _get_data_features, _open_openml_url from sklearn.utils.testing import (assert_warns_message, assert_raise_message) from sklearn.externals.six import string_types @@ -16,6 +16,8 @@ currdir = os.path.dirname(os.path.abspath(__file__)) +# if True, urlopen will be monkey patched to only use local files +test_offline = True def _fetch_dataset_from_openml(data_id, data_name, data_version, @@ -75,7 +77,7 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, # check numeric features. Note that the response of _get_data_features is # mocked too. feature_name_type = {feature['name']: feature['data_type'] for feature - in _get_data_features(data_id, None, False)} + in _get_data_features(data_id, None)} for idx, feature_name in enumerate(data_by_id.feature_names): if feature_name_type[feature_name] == 'numeric': # check that all elements in an object array are numeric @@ -161,7 +163,9 @@ def _mock_urlopen(url): else: raise ValueError('Unknown mocking URL pattern: %s' % url) - context.setattr(sklearn.datasets.openml, 'urlopen', _mock_urlopen) + # XXX: Global variable + if test_offline: + context.setattr(sklearn.datasets.openml, 'urlopen', _mock_urlopen) def test_fetch_openml_iris(monkeypatch): @@ -308,6 +312,23 @@ def test_fetch_openml_emotions(monkeypatch): compare_default_target=True) +def test_open_openml_url_cache(monkeypatch): + data_id = 61 + + _monkey_patch_webbased_functions(monkeypatch, data_id) + openml_path = sklearn.datasets.openml._DATA_FILE.format(data_id) + test_directory = os.path.join(os.path.expanduser('~'), 'scikit_learn_data') + # first fill the cache + response1 = _open_openml_url(openml_path, test_directory) + # assert file exists + location = os.path.join(test_directory, 'openml.org', + str(hash(openml_path))) + assert os.path.isfile(location) + # redownload, to utilize cache + response2 = _open_openml_url(openml_path, test_directory) + assert response1.read() == response2.read() + + def test_fetch_openml_notarget(monkeypatch): data_id = 61 target_column = None From bff90e50e67302d39aadef727d5179d8ebe8f26a Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Wed, 25 Jul 2018 11:47:16 -0400 Subject: [PATCH 115/138] changed hashes into file structure --- sklearn/datasets/openml.py | 13 ++++++------- sklearn/datasets/tests/test_openml.py | 3 +-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index a11ba37e1a4e0..1e383c062a1de 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -20,7 +20,7 @@ from .base import get_data_home from ..externals.six import string_types, PY2 from ..externals.six.moves.urllib.error import HTTPError -from ..utils import Bunch, Memory +from ..utils import Bunch __all__ = ['fetch_openml'] @@ -52,20 +52,19 @@ def _open_openml_url(openml_path, data_home): """ if data_home is None: return urlopen(_OPENML_PREFIX + openml_path) - local_path = os.path.join(data_home, 'openml.org', str(hash(openml_path))) + local_path = os.path.join(data_home, 'openml.org', openml_path + ".gz") if not os.path.exists(local_path): try: - os.mkdir(os.path.dirname(local_path)) + os.makedirs(os.path.dirname(local_path)) except OSError: - # potentially, the directory has been created in the meantime by - # a different process + # potentially, the directory has been created already pass try: with gzip.GzipFile(local_path, 'wb') as fdst: with urlopen(_OPENML_PREFIX + openml_path) as fsrc: shutil.copyfileobj(fsrc, fdst) - except Exception as e: + except Exception: os.unlink(local_path) raise # XXX: unnecessary decompression on first access @@ -244,7 +243,7 @@ def _get_data_info_by_name(name, version, data_home): values except "active" are treated as integer. data_home : str or None - Location to cache the response. None if no cache is required. + Location to cache the response. None if no cache is required. Returns ------- diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 148257468bf4e..265f045445f7e 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -321,8 +321,7 @@ def test_open_openml_url_cache(monkeypatch): # first fill the cache response1 = _open_openml_url(openml_path, test_directory) # assert file exists - location = os.path.join(test_directory, 'openml.org', - str(hash(openml_path))) + location = os.path.join(test_directory, 'openml.org', openml_path + '.gz') assert os.path.isfile(location) # redownload, to utilize cache response2 = _open_openml_url(openml_path, test_directory) From 5bec4027d0fefad7e543da168fcaef8925d39ba6 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 26 Jul 2018 12:42:16 -0400 Subject: [PATCH 116/138] comments by Joel --- doc/datasets/openml.rst | 41 +++++++++++++------------ sklearn/datasets/openml.py | 12 ++++---- sklearn/externals/{arff.py => _arff.py} | 0 3 files changed, 28 insertions(+), 25 deletions(-) rename sklearn/externals/{arff.py => _arff.py} (100%) diff --git a/doc/datasets/openml.rst b/doc/datasets/openml.rst index 4410a47129928..53ab211df903e 100644 --- a/doc/datasets/openml.rst +++ b/doc/datasets/openml.rst @@ -22,9 +22,10 @@ For example, to download a dataset of gene expressions in mice brains:: >>> from sklearn.datasets import fetch_openml >>> mice = fetch_openml(name='miceprotein', version=4) -To fully specify a dataset, you need to provide a name and a version, though the -version is optional, see :ref:`openml_versions`_ below. -The dataset contains a total of 1080 examples belonging to 8 different classes:: +To fully specify a dataset, you need to provide a name and a version, though +the version is optional, see :ref:`openml_versions`_ below. +The dataset contains a total of 1080 examples belonging to 8 different +classes:: >>> mice.data.shape (1080, 77) @@ -57,15 +58,15 @@ and ``details`` attributes:: The ``DESCR`` contains a free-text description of the data, while ``details`` contains a dictionary of meta-data stored by openml, like the dataset id. -For more details, see the `OpenML documentation `_ -The ``data_id`` of the mice protein dataset is 40966, and you can use this (or -the name) to get more information on the dataset on the openml website:: +For more details, see the `OpenML documentation +`_ The ``data_id`` of the mice protein dataset +is 40966, and you can use this (or the name) to get more information on the +dataset on the openml website:: >>> mice.url 'https://www.openml.org/d/40966' -The ``data_id`` is also the most specific way to specify how to fetch a dataset from -OpenML:: +The ``data_id`` also uniquely identifies a dataset from OpenML:: >>> mice = fetch_openml(data_id=40966) >>> mice.details # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS +SKIP @@ -85,16 +86,16 @@ OpenML:: Dataset Versions ---------------- -A dataset is uniquely specified by its ``data_id``, but not necessarily by its name. -Several different "versions" of a dataset with the same name can exist which can contain -entirely different datasets. +A dataset is uniquely specified by its ``data_id``, but not necessarily by its +name. Several different "versions" of a dataset with the same name can exist +which can contain entirely different datasets. If a particular version of a dataset has been found to contain significant -issues, it might be inactivated. Using a name to specify a dataset will yield +issues, it might be deactivated. Using a name to specify a dataset will yield the earliest version of a dataset that is still active. That means that ``fetch_openml(name="miceprotein")`` can yield different results at different times if earlier versions become inactive. -You can see that the dataset with ``data_id`` 40966 that we fetched above is the version 1 -of the "miceprotein" dataset:: +You can see that the dataset with ``data_id`` 40966 that we fetched above is +the version 1 of the "miceprotein" dataset:: >>> mice.details['version'] #doctest: +SKIP '1' @@ -120,15 +121,17 @@ has multiple versions:: >>> iris_969.details['id'] '969' -Specifying the dataset by the name "iris" yields the lowest version, version 1, with the ``data_id`` 61. -To make sure you always get this exact dataset, it is safest to specify it by the dataset ``data_id``. -The other dataset, with ``data_id`` 969, is version 3 (version 2 has become inactive), and contains -a binarized version of the data:: +Specifying the dataset by the name "iris" yields the lowest version, version 1, +with the ``data_id`` 61. To make sure you always get this exact dataset, it is +safest to specify it by the dataset ``data_id``. The other dataset, with +``data_id`` 969, is version 3 (version 2 has become inactive), and contains a +binarized version of the data:: >>> np.unique(iris_969.target) array(['N', 'P'], dtype=object) -You can also specify both the name and the version, which also uniquely identifies the dataset:: +You can also specify both the name and the version, which also uniquely +identifies the dataset:: >>> iris_version_3 = fetch_openml(name="iris", version=3) >>> iris_version_3.details['version'] diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 1e383c062a1de..47a7b6a7d91ed 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -16,7 +16,7 @@ import numpy as np import scipy.sparse -from sklearn.externals import arff +from sklearn.externals import _arff from .base import get_data_home from ..externals.six import string_types, PY2 from ..externals.six.moves.urllib.error import HTTPError @@ -303,15 +303,15 @@ def _download_data_arff(file_id, sparse, data_home): url = _DATA_FILE.format(file_id) response = _open_openml_url(url, data_home) if sparse is True: - return_type = arff.COO + return_type = _arff.COO else: - return_type = arff.DENSE + return_type = _arff.DENSE if PY2: - arff_file = arff.load(response, return_type=return_type) + arff_file = _arff.load(response, return_type=return_type) else: - arff_file = arff.loads(response.read().decode('utf-8'), - return_type=return_type) + arff_file = _arff.loads(response.read().decode('utf-8'), + return_type=return_type) response.close() return arff_file diff --git a/sklearn/externals/arff.py b/sklearn/externals/_arff.py similarity index 100% rename from sklearn/externals/arff.py rename to sklearn/externals/_arff.py From 6c4c920f35a61223fcefc9cb944e3e0f0fb9cadb Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 27 Jul 2018 13:46:03 -0400 Subject: [PATCH 117/138] comments by Joel --- sklearn/datasets/openml.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 47a7b6a7d91ed..aa9303ce8812c 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -163,6 +163,7 @@ def _sparse_data_to_array(arff_data, dtype, include_columns): y_shape = (num_obs, len(include_columns)) reindexed_columns = {column_idx: array_idx for array_idx, column_idx in enumerate(include_columns)} + # TODO: improve for efficiency y = np.empty(y_shape, dtype=dtype) for val, row_idx, col_idx in zip(arff_data[0], arff_data[1], arff_data[2]): if col_idx in include_columns: @@ -203,12 +204,17 @@ def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): y : np.array """ if isinstance(arff_data, list): + # FIXME: It would be better to use structured arrays, to circumvent + # using an dtype=object array data = np.array(arff_data, dtype=object) X = np.array(data[:, col_slice_x], dtype=dtype_x) y = np.array(data[:, col_slice_y], dtype=dtype_y) return X, y elif isinstance(arff_data, tuple): if dtype_x is not np.float64: + # note that dtype_x is in {np.float64, object}. In case the data + # consists of integers, dtype will be np.float64 cf. the arff + # specifications raise ValueError('sparse array only allowed for numeric columns') arff_data_X = _split_sparse_columns(arff_data, col_slice_x) num_obs = max(arff_data[1]) + 1 @@ -390,16 +396,16 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, data : Bunch Dictionary-like object, the interesting attributes are: - data : np.array - the data to learn + data : np.array or scipy.sparse.csr_matrix + the feature matrix target : np.array - the regression target or classification labels + the regression target or classification labels, if applicable DESCR : str the full description of the dataset feature_names : list the original names of the dataset columns details : json - more information on the openml meta-data. + more metadata from OpenML Missing values in the 'data' and 'target' field are represented as NaN's. @@ -409,9 +415,6 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, if cache is False: # no caching will be applied data_home = None - else: - if not exists(data_home): - os.makedirs(data_home) # check valid function arguments. data_id XOR (name, version) should be # provided From eae5f622a93551473fd763d237a4b06a0d1a2567 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Fri, 27 Jul 2018 14:37:32 -0400 Subject: [PATCH 118/138] flake8 correction --- sklearn/datasets/openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index aa9303ce8812c..2788c95b127fb 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -2,7 +2,7 @@ import json import os import shutil -from os.path import join, exists +from os.path import join from warnings import warn try: From 7a01418c96e059a53c83d3c850950c5e16cc960d Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Mon, 30 Jul 2018 01:56:26 -0400 Subject: [PATCH 119/138] extended test files with expected missing values --- sklearn/datasets/tests/test_openml.py | 57 +++++++++++++++++++-------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 265f045445f7e..2f6e1fc76eb61 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -18,11 +18,13 @@ currdir = os.path.dirname(os.path.abspath(__file__)) # if True, urlopen will be monkey patched to only use local files test_offline = True +test_gzip = True def _fetch_dataset_from_openml(data_id, data_name, data_version, target_column_name, expected_observations, expected_features, + expected_missing, exptected_data_dtype, exptected_target_dtype, expect_sparse, compare_default_target): # fetches a dataset in three various ways from OpenML, using the @@ -73,6 +75,13 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, assert isinstance(data_by_id.data, scipy.sparse.csr_matrix) else: assert isinstance(data_by_id.data, np.ndarray) + # np.isnan doesn't work on crs matrix + if exptected_data_dtype == np.float64: + assert np.count_nonzero(np.isnan(data_by_id.data)) == \ + expected_missing + else: + # mandatory == operator (instead of 'is' keyword) + assert (data_by_id.data == None).sum() == expected_missing # check numeric features. Note that the response of _get_data_features is # mocked too. @@ -91,7 +100,7 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, return data_by_id -def _monkey_patch_webbased_functions(context, data_id, gziped_files=True): +def _monkey_patch_webbased_functions(context, data_id, gziped_files): url_prefix_data_description = "https://openml.org/api/v1/json/data/" url_prefix_data_features = "https://openml.org/api/v1/json/data/features/" url_prefix_download_data = "https://openml.org/data/v1/" @@ -176,10 +185,12 @@ def test_fetch_openml_iris(monkeypatch): target_column = 'class' expected_observations = 150 expected_features = 4 + expected_missing = 0 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, + expected_missing, np.float64, object, expect_sparse=False, compare_default_target=True) @@ -192,10 +203,12 @@ def test_fetch_openml_iris_multitarget(monkeypatch): target_column = ['sepallength', 'sepalwidth'] expected_observations = 150 expected_features = 3 + expected_missing = 0 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, + expected_missing, object, np.float64, expect_sparse=False, compare_default_target=False) @@ -209,9 +222,11 @@ def test_fetch_openml_anneal(monkeypatch): # Not all original instances included for space reasons expected_observations = 11 expected_features = 38 - _monkey_patch_webbased_functions(monkeypatch, data_id) + expected_missing = 267 + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, + expected_missing, object, object, expect_sparse=False, compare_default_target=True) @@ -225,9 +240,11 @@ def test_fetch_openml_anneal_multitarget(monkeypatch): # Not all original instances included for space reasons expected_observations = 11 expected_features = 36 - _monkey_patch_webbased_functions(monkeypatch, data_id) + expected_missing = 267 + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, + expected_missing, object, object, expect_sparse=False, compare_default_target=False) @@ -240,9 +257,11 @@ def test_fetch_openml_cpu(monkeypatch): target_column = 'class' expected_observations = 209 expected_features = 7 - _monkey_patch_webbased_functions(monkeypatch, data_id) + expected_missing = 0 + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, + expected_missing, object, np.float64, expect_sparse=False, compare_default_target=True) @@ -259,7 +278,8 @@ def test_fetch_openml_australian(monkeypatch): # Not all original instances included for space reasons expected_observations = 85 expected_features = 14 - _monkey_patch_webbased_functions(monkeypatch, data_id) + expected_missing = 0 + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) assert_warns_message( UserWarning, "Version 1 of dataset Australian is inactive,", @@ -269,6 +289,7 @@ def test_fetch_openml_australian(monkeypatch): 'target_column_name': target_column, 'expected_observations': expected_observations, 'expected_features': expected_features, + 'expected_missing': expected_missing, 'expect_sparse': True, 'exptected_data_dtype': np.float64, 'exptected_target_dtype': object, @@ -288,9 +309,11 @@ def test_fetch_openml_miceprotein(monkeypatch): # Not all original instances included for space reasons expected_observations = 7 expected_features = 77 - _monkey_patch_webbased_functions(monkeypatch, data_id) + expected_missing = 7 + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, + expected_missing, np.float64, object, expect_sparse=False, compare_default_target=True) @@ -304,10 +327,12 @@ def test_fetch_openml_emotions(monkeypatch): 'quiet.still', 'sad.lonely', 'angry.aggresive'] expected_observations = 13 expected_features = 72 - _monkey_patch_webbased_functions(monkeypatch, data_id) + expected_missing = 0 + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, + expected_missing, np.float64, object, expect_sparse=False, compare_default_target=True) @@ -315,7 +340,7 @@ def test_fetch_openml_emotions(monkeypatch): def test_open_openml_url_cache(monkeypatch): data_id = 61 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) openml_path = sklearn.datasets.openml._DATA_FILE.format(data_id) test_directory = os.path.join(os.path.expanduser('~'), 'scikit_learn_data') # first fill the cache @@ -334,7 +359,7 @@ def test_fetch_openml_notarget(monkeypatch): expected_observations = 150 expected_features = 5 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) data = fetch_openml(data_id=data_id, target_column_name=target_column, cache=False) assert data.data.shape == (expected_observations, expected_features) @@ -344,7 +369,7 @@ def test_fetch_openml_notarget(monkeypatch): def test_fetch_openml_inactive(monkeypatch): # fetch inactive dataset by id data_id = 40675 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) glas2 = assert_warns_message( UserWarning, "Version 1 of dataset glass2 is inactive,", fetch_openml, data_id=data_id, cache=False) @@ -359,7 +384,7 @@ def test_fetch_openml_inactive(monkeypatch): def test_fetch_nonexiting(monkeypatch): # there is no active version of glass2 data_id = 40675 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) # Note that we only want to search by name (not data id) assert_raise_message(ValueError, "No active dataset glass2 found", fetch_openml, name='glass2', cache=False) @@ -368,7 +393,7 @@ def test_fetch_nonexiting(monkeypatch): def test_raises_illegal_multitarget(monkeypatch): data_id = 61 targets = ['sepalwidth', 'class'] - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) # Note that we only want to search by name (not data id) assert_raise_message(ValueError, "Can only handle homogeneous multi-target datasets,", @@ -380,7 +405,7 @@ def test_warn_ignore_attribute(monkeypatch): data_id = 40966 expected_row_id_msg = "target_column_name={} has flag is_row_identifier." expected_ignore_msg = "target_column_name={} has flag is_ignore." - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) # single column test assert_warns_message(UserWarning, expected_row_id_msg.format('MouseID'), fetch_openml, data_id=data_id, @@ -403,7 +428,7 @@ def test_warn_ignore_attribute(monkeypatch): def test_illegal_column(monkeypatch): data_id = 61 - _monkey_patch_webbased_functions(monkeypatch, data_id) + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) assert_raise_message(KeyError, "Could not find target_column_name=", fetch_openml, data_id=data_id, target_column_name='undefined', cache=False) From 426bea4b992d1ee70ba2bbcf23c6ffd50fec053f Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 31 Jul 2018 03:06:11 -0400 Subject: [PATCH 120/138] encode categoricals --- sklearn/datasets/openml.py | 48 +++++++++------------------ sklearn/datasets/tests/test_openml.py | 25 ++------------ 2 files changed, 19 insertions(+), 54 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 2788c95b127fb..5062c717ae074 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -156,7 +156,7 @@ def _split_sparse_columns(arff_data, include_columns): return arff_data_new -def _sparse_data_to_array(arff_data, dtype, include_columns): +def _sparse_data_to_array(arff_data, include_columns): # turns the sparse data back into an array (can't use toarray() function, # as this does only work on numeric data) num_obs = max(arff_data[1]) + 1 @@ -164,14 +164,14 @@ def _sparse_data_to_array(arff_data, dtype, include_columns): reindexed_columns = {column_idx: array_idx for array_idx, column_idx in enumerate(include_columns)} # TODO: improve for efficiency - y = np.empty(y_shape, dtype=dtype) + y = np.empty(y_shape, dtype=np.float64) for val, row_idx, col_idx in zip(arff_data[0], arff_data[1], arff_data[2]): if col_idx in include_columns: y[row_idx, reindexed_columns[col_idx]] = val return y -def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): +def _convert_arff_data(arff_data, col_slice_x, col_slice_y): """ converts the arff object into the appropriate matrix type (np.array or scipy.sparse.csr_matrix) based on the 'data part' (i.e., in the @@ -182,18 +182,10 @@ def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): arff_data : list or dict as obtained from liac-arff object - dtype_x : type - The data type in which the X data should be returned. Preferred: - np.float64 or object - col_slice_x : list The column indices that are sliced from the original array to return as X data - type_y : type - The data type in which the y data should be returned. Preferred: - np.float64 or object - col_slice_y : list The column indices that are sliced from the original array to return as y data @@ -206,24 +198,19 @@ def _convert_arff_data(arff_data, dtype_x, col_slice_x, dtype_y, col_slice_y): if isinstance(arff_data, list): # FIXME: It would be better to use structured arrays, to circumvent # using an dtype=object array - data = np.array(arff_data, dtype=object) - X = np.array(data[:, col_slice_x], dtype=dtype_x) - y = np.array(data[:, col_slice_y], dtype=dtype_y) + data = np.array(arff_data, dtype=np.float64) + X = np.array(data[:, col_slice_x], dtype=np.float64) + y = np.array(data[:, col_slice_y], dtype=np.float64) return X, y elif isinstance(arff_data, tuple): - if dtype_x is not np.float64: - # note that dtype_x is in {np.float64, object}. In case the data - # consists of integers, dtype will be np.float64 cf. the arff - # specifications - raise ValueError('sparse array only allowed for numeric columns') arff_data_X = _split_sparse_columns(arff_data, col_slice_x) num_obs = max(arff_data[1]) + 1 X_shape = (num_obs, len(col_slice_x)) X = scipy.sparse.coo_matrix( (arff_data_X[0], (arff_data_X[1], arff_data_X[2])), - shape=X_shape, dtype=dtype_x) + shape=X_shape, dtype=np.float64) X = X.tocsr() - y = _sparse_data_to_array(arff_data, dtype_y, col_slice_y) + y = _sparse_data_to_array(arff_data, col_slice_y) return X, y else: # This should never happen @@ -314,9 +301,11 @@ def _download_data_arff(file_id, sparse, data_home): return_type = _arff.DENSE if PY2: - arff_file = _arff.load(response, return_type=return_type) + arff_file = _arff.load(response, encode_nominal=True, + return_type=return_type, ) else: arff_file = _arff.loads(response.read().decode('utf-8'), + encode_nominal=True, return_type=return_type) response.close() return arff_file @@ -476,17 +465,13 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, # prepare which columns and data types should be returned for the X and y features_dict = {feature['name']: feature for feature in features_list} - dtype_y = _determine_target_data_type(features_dict, - target_column_name) + + # XXX: col_slice_y should be all nominal or all numeric + _determine_target_data_type(features_dict, target_column_name) + col_slice_y = [int(features_dict[col_name]['index']) for col_name in target_column_name] - if all([feature['data_type'] == "numeric" for feature in features_list - if feature['name'] in data_columns]): - dtype_x = np.float64 - else: - dtype_x = object - col_slice_x = [int(features_dict[col_name]['index']) for col_name in data_columns] @@ -498,8 +483,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, # obtain the data arff_data = _download_data_arff(data_description['file_id'], return_sparse, data_home)['data'] - X, y = _convert_arff_data(arff_data, dtype_x, col_slice_x, - dtype_y, col_slice_y) + X, y = _convert_arff_data(arff_data, col_slice_x, col_slice_y) description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 2f6e1fc76eb61..a883b54d5b676 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -51,8 +51,8 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, # multi target, so target is array assert data_by_id.target.shape == (expected_observations, len(target_column_name)) - assert data_by_id.data.dtype == exptected_data_dtype - assert data_by_id.target.dtype == exptected_target_dtype + assert data_by_id.data.dtype == np.float64 + assert data_by_id.target.dtype == np.float64 assert len(data_by_id.feature_names) == expected_features for feature in data_by_id.feature_names: assert isinstance(feature, string_types) @@ -76,27 +76,8 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, else: assert isinstance(data_by_id.data, np.ndarray) # np.isnan doesn't work on crs matrix - if exptected_data_dtype == np.float64: - assert np.count_nonzero(np.isnan(data_by_id.data)) == \ + assert np.count_nonzero(np.isnan(data_by_id.data)) == \ expected_missing - else: - # mandatory == operator (instead of 'is' keyword) - assert (data_by_id.data == None).sum() == expected_missing - - # check numeric features. Note that the response of _get_data_features is - # mocked too. - feature_name_type = {feature['name']: feature['data_type'] for feature - in _get_data_features(data_id, None)} - for idx, feature_name in enumerate(data_by_id.feature_names): - if feature_name_type[feature_name] == 'numeric': - # check that all elements in an object array are numeric - # cf. https://stackoverflow.com/a/19486803/1791279 - if isinstance(data_by_id.data, scipy.sparse.csr_matrix): - dtype = np.array(list(data_by_id.data[:, idx].toarray())).dtype - else: - dtype = np.array(list(data_by_id.data[:, idx])).dtype - assert np.issubdtype(dtype, np.number) - return data_by_id From 15c2b48a5cda521ebd74ad35e71b49d7c187ce86 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Thu, 2 Aug 2018 01:47:49 -0400 Subject: [PATCH 121/138] renamed variable names --- sklearn/datasets/openml.py | 61 +++++++++++++-------------- sklearn/datasets/tests/test_openml.py | 36 ++++++++-------- 2 files changed, 48 insertions(+), 49 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 5062c717ae074..7f4f3f72b7f9e 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -311,37 +311,36 @@ def _download_data_arff(file_id, sparse, data_home): return arff_file -def _determine_target_data_type(features_dict, target_column_names): - # determine the data type of the y array in case there are multiple targets +def _verify_target_data_type(features_dict, target_columns): + # verifies the data type of the y array in case there are multiple targets # (throws an error if these targets do not comply with sklearn support) - if not isinstance(target_column_names, list): - raise ValueError('target_column_name should be list, ' - 'got: %s' % type(target_column_names)) + if not isinstance(target_columns, list): + raise ValueError('target_column should be list, ' + 'got: %s' % type(target_columns)) found_types = set() - for target_column_name in target_column_names: - if target_column_name not in features_dict: - raise KeyError('Could not find target_column_name={}') - if features_dict[target_column_name]['data_type'] == "numeric": + for target_column in target_columns: + if target_column not in features_dict: + raise KeyError('Could not find target_column={}') + if features_dict[target_column]['data_type'] == "numeric": found_types.add(np.float64) else: found_types.add(object) # note: we compare to a string, not boolean - if features_dict[target_column_name]['is_ignore'] == 'true': - warn('target_column_name={} has flag is_ignore.'.format( - target_column_name)) - if features_dict[target_column_name]['is_row_identifier'] == 'true': - warn('target_column_name={} has flag is_row_identifier.'.format( - target_column_name)) + if features_dict[target_column]['is_ignore'] == 'true': + warn('target_column={} has flag is_ignore.'.format( + target_column)) + if features_dict[target_column]['is_row_identifier'] == 'true': + warn('target_column={} has flag is_row_identifier.'.format( + target_column)) if len(found_types) > 1: raise ValueError('Can only handle homogeneous multi-target datasets, ' 'i.e., all targets are either numeric or ' 'categorical.') - return list(found_types)[0] if len(found_types) > 0 else None def fetch_openml(name=None, version='active', data_id=None, data_home=None, - target_column_name='default-target', cache=True): + target_column='default-target', cache=True): """Fetch dataset from openml by name or dataset id. Datasets are uniquely identified by either an integer ID or by a @@ -369,7 +368,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, Specify another download and cache folder for the data sets. By default all scikit-learn data is stored in '~/scikit_learn_data' subfolders. - target_column_name : string, list or None, default 'default-target' + target_column : string, list or None, default 'default-target' Specify the column name in the data to use as target. If 'default-target', the standard target column a stored on the server is used. If ``None``, all columns are returned as data and the @@ -442,24 +441,24 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, # download data features, meta-info about column types features_list = _get_data_features(data_id, data_home) - if target_column_name == "default-target": + if target_column == "default-target": # determines the default target based on the data feature results # (which is currently more reliable than the data description; # see issue: https://github.com/openml/OpenML/issues/768) - target_column_name = [feature['name'] for feature in features_list + target_column = [feature['name'] for feature in features_list if feature['is_target'] == 'true'] - # for code-simplicity, make target_column_name by default a list - if isinstance(target_column_name, string_types): - target_column_name = [target_column_name] - elif target_column_name is None: - target_column_name = [] - elif not isinstance(target_column_name, list): - raise TypeError("Did not recognize type of target_column_name" + # for code-simplicity, make target_column by default a list + if isinstance(target_column, string_types): + target_column = [target_column] + elif target_column is None: + target_column = [] + elif not isinstance(target_column, list): + raise TypeError("Did not recognize type of target_column" "Should be six.string_type, list or None. Got: " - "{}".format(type(target_column_name))) + "{}".format(type(target_column))) data_columns = [feature['name'] for feature in features_list - if (feature['name'] not in target_column_name and + if (feature['name'] not in target_column and feature['is_ignore'] != 'true' and feature['is_row_identifier'] != 'true')] @@ -467,10 +466,10 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, features_dict = {feature['name']: feature for feature in features_list} # XXX: col_slice_y should be all nominal or all numeric - _determine_target_data_type(features_dict, target_column_name) + _verify_target_data_type(features_dict, target_column) col_slice_y = [int(features_dict[col_name]['index']) - for col_name in target_column_name] + for col_name in target_column] col_slice_x = [int(features_dict[col_name]['index']) for col_name in data_columns] diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index a883b54d5b676..0ab435f915188 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -22,7 +22,7 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, - target_column_name, + target_column, expected_observations, expected_features, expected_missing, exptected_data_dtype, exptected_target_dtype, @@ -41,16 +41,16 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, # fetch with dataset id data_by_id = fetch_openml(data_id=data_id, cache=False, - target_column_name=target_column_name) + target_column=target_column) assert data_by_id.details['name'] == data_name assert data_by_id.data.shape == (expected_observations, expected_features) - if isinstance(target_column_name, str): + if isinstance(target_column, str): # single target, so target is vector assert data_by_id.target.shape == (expected_observations, ) - elif isinstance(target_column_name, list): + elif isinstance(target_column, list): # multi target, so target is array assert data_by_id.target.shape == (expected_observations, - len(target_column_name)) + len(target_column)) assert data_by_id.data.dtype == np.float64 assert data_by_id.target.dtype == np.float64 assert len(data_by_id.feature_names) == expected_features @@ -267,7 +267,7 @@ def test_fetch_openml_australian(monkeypatch): _fetch_dataset_from_openml, **{'data_id': data_id, 'data_name': data_name, 'data_version': data_version, - 'target_column_name': target_column, + 'target_column': target_column, 'expected_observations': expected_observations, 'expected_features': expected_features, 'expected_missing': expected_missing, @@ -341,7 +341,7 @@ def test_fetch_openml_notarget(monkeypatch): expected_features = 5 _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) - data = fetch_openml(data_id=data_id, target_column_name=target_column, + data = fetch_openml(data_id=data_id, target_column=target_column, cache=False) assert data.data.shape == (expected_observations, expected_features) assert data.target is None @@ -379,44 +379,44 @@ def test_raises_illegal_multitarget(monkeypatch): assert_raise_message(ValueError, "Can only handle homogeneous multi-target datasets,", fetch_openml, data_id=data_id, - target_column_name=targets, cache=False) + target_column=targets, cache=False) def test_warn_ignore_attribute(monkeypatch): data_id = 40966 - expected_row_id_msg = "target_column_name={} has flag is_row_identifier." - expected_ignore_msg = "target_column_name={} has flag is_ignore." + expected_row_id_msg = "target_column={} has flag is_row_identifier." + expected_ignore_msg = "target_column={} has flag is_ignore." _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) # single column test assert_warns_message(UserWarning, expected_row_id_msg.format('MouseID'), fetch_openml, data_id=data_id, - target_column_name='MouseID', + target_column='MouseID', cache=False) assert_warns_message(UserWarning, expected_ignore_msg.format('Genotype'), fetch_openml, data_id=data_id, - target_column_name='Genotype', + target_column='Genotype', cache=False) # multi column test assert_warns_message(UserWarning, expected_row_id_msg.format('MouseID'), fetch_openml, data_id=data_id, - target_column_name=['MouseID', 'class'], + target_column=['MouseID', 'class'], cache=False) assert_warns_message(UserWarning, expected_ignore_msg.format('Genotype'), fetch_openml, data_id=data_id, - target_column_name=['Genotype', 'class'], + target_column=['Genotype', 'class'], cache=False) def test_illegal_column(monkeypatch): data_id = 61 _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) - assert_raise_message(KeyError, "Could not find target_column_name=", + assert_raise_message(KeyError, "Could not find target_column=", fetch_openml, data_id=data_id, - target_column_name='undefined', cache=False) + target_column='undefined', cache=False) - assert_raise_message(KeyError, "Could not find target_column_name=", + assert_raise_message(KeyError, "Could not find target_column=", fetch_openml, data_id=data_id, - target_column_name=['undefined', 'class'], + target_column=['undefined', 'class'], cache=False) From cea4f64601838cb2c0249b0535d4f4cd9d7a1452 Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Mon, 6 Aug 2018 19:37:23 +1000 Subject: [PATCH 122/138] Targets not encoded; Towards metadata about nominals No tests yet --- sklearn/datasets/openml.py | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 7f4f3f72b7f9e..77d5f0ce6b97d 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -384,16 +384,19 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, data : Bunch Dictionary-like object, the interesting attributes are: - data : np.array or scipy.sparse.csr_matrix - the feature matrix + data : np.array or scipy.sparse.csr_matrix of floats + The feature matrix. Categorical features are encoded as ordinals. target : np.array - the regression target or classification labels, if applicable + The regression target or classification labels, if applicable DESCR : str - the full description of the dataset + The full description of the dataset feature_names : list - the original names of the dataset columns - details : json - more metadata from OpenML + The names of the dataset columns + categories : dict + Maps each categorical feature name to a list of values, such + that the value encoded as i is ith in the list. + details : dict + More metadata from OpenML Missing values in the 'data' and 'target' field are represented as NaN's. @@ -480,10 +483,23 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, return_sparse = True # obtain the data - arff_data = _download_data_arff(data_description['file_id'], return_sparse, - data_home)['data'] + arff = _download_data_arff(data_description['file_id'], return_sparse, + data_home) + arff_data = arff['data'] + nominal_attributes = {k: v for k, v in arff['attributes'] + if isinstance(v, list)} X, y = _convert_arff_data(arff_data, col_slice_x, col_slice_y) + is_classification = {col_name in nominal_attributes + for col_name in target_column} + if all(is_classification): + y = np.hstack([np.take(nominal_attributes.pop(col_name), + y[:, i].astype(int)) + for i, col_name in enumerate(target_column)]) + elif any(is_classification): + raise ValueError('Mix of nominal and non-nominal targets is not ' + 'currently supported') + description = u"{}\n\nDownloaded from openml.org.".format( data_description.pop('description')) @@ -497,6 +513,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, bunch = Bunch( data=X, target=y, feature_names=data_columns, DESCR=description, details=data_description, features=features_list, + categories=nominal_attributes, url="https://www.openml.org/d/{}".format(data_id)) return bunch From cea54a4ee7e723d7cd5d2d05b5f2f4cc08e18a3d Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Mon, 6 Aug 2018 19:45:00 +1000 Subject: [PATCH 123/138] handle no target --- sklearn/datasets/openml.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 77d5f0ce6b97d..176df250d4cab 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -492,9 +492,12 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, is_classification = {col_name in nominal_attributes for col_name in target_column} - if all(is_classification): + if not is_classification: + # No target + pass + elif all(is_classification): y = np.hstack([np.take(nominal_attributes.pop(col_name), - y[:, i].astype(int)) + y[:, i:i+1].astype(int)) for i, col_name in enumerate(target_column)]) elif any(is_classification): raise ValueError('Mix of nominal and non-nominal targets is not ' From 9a4d1d8b79edb42ef00da1f9b1f70acc7d51f721 Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Tue, 7 Aug 2018 18:21:31 +1000 Subject: [PATCH 124/138] Make target dtype an object in classification And update tests --- sklearn/datasets/openml.py | 3 ++- sklearn/datasets/tests/test_openml.py | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 176df250d4cab..65e45e394e238 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -496,7 +496,8 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, # No target pass elif all(is_classification): - y = np.hstack([np.take(nominal_attributes.pop(col_name), + y = np.hstack([np.take(np.asarray(nominal_attributes.pop(col_name), + dtype='O'), y[:, i:i+1].astype(int)) for i, col_name in enumerate(target_column)]) elif any(is_classification): diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 0ab435f915188..14fbb713ff544 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -25,7 +25,7 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, expected_missing, - exptected_data_dtype, exptected_target_dtype, + expected_data_dtype, expected_target_dtype, expect_sparse, compare_default_target): # fetches a dataset in three various ways from OpenML, using the # fetch_openml function, and does various checks on the validity of the @@ -52,7 +52,7 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, assert data_by_id.target.shape == (expected_observations, len(target_column)) assert data_by_id.data.dtype == np.float64 - assert data_by_id.target.dtype == np.float64 + assert data_by_id.target.dtype == expected_target_dtype assert len(data_by_id.feature_names) == expected_features for feature in data_by_id.feature_names: assert isinstance(feature, string_types) @@ -272,8 +272,8 @@ def test_fetch_openml_australian(monkeypatch): 'expected_features': expected_features, 'expected_missing': expected_missing, 'expect_sparse': True, - 'exptected_data_dtype': np.float64, - 'exptected_target_dtype': object, + 'expected_data_dtype': np.float64, + 'expected_target_dtype': object, 'compare_default_target': False} # numpy specific check ) From 2892be663b253cf0689c165f0689419ffda929c5 Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Wed, 8 Aug 2018 01:06:56 +1000 Subject: [PATCH 125/138] Test categories attribute, and some fixes --- sklearn/datasets/openml.py | 10 ++++++++-- sklearn/datasets/tests/test_openml.py | 14 +++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 65e45e394e238..bf36279b2978e 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -387,7 +387,8 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, data : np.array or scipy.sparse.csr_matrix of floats The feature matrix. Categorical features are encoded as ordinals. target : np.array - The regression target or classification labels, if applicable + The regression target or classification labels, if applicable. + Dtype is float if numeric, and object if categorical. DESCR : str The full description of the dataset feature_names : list @@ -449,7 +450,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, # (which is currently more reliable than the data description; # see issue: https://github.com/openml/OpenML/issues/768) target_column = [feature['name'] for feature in features_list - if feature['is_target'] == 'true'] + if feature['is_target'] == 'true'] # for code-simplicity, make target_column by default a list if isinstance(target_column, string_types): @@ -488,6 +489,11 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, arff_data = arff['data'] nominal_attributes = {k: v for k, v in arff['attributes'] if isinstance(v, list)} + for feature in features_list: + if 'true' in (feature['is_row_identifier'], + feature['is_ignore']) and (feature['name'] not in + target_column): + del nominal_attributes[feature['name']] X, y = _convert_arff_data(arff_data, col_slice_x, col_slice_y) is_classification = {col_name in nominal_attributes diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 14fbb713ff544..9f909bc4cbd4c 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -57,6 +57,14 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, for feature in data_by_id.feature_names: assert isinstance(feature, string_types) + # TODO: pass in a list of expected nominal features + for feature, categories in data_by_id.categories.items(): + print(feature, data_by_id.feature_names) + feature_idx = data_by_id.feature_names.index(feature) + values = np.unique(data_by_id.data[:, feature_idx]) + values = values[np.isfinite(values)] + assert set(values) <= set(range(len(categories))) + if compare_default_target: # check whether the data by id and data by id target are equal data_by_id_default = fetch_openml(data_id=data_id, cache=False) @@ -75,9 +83,9 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, assert isinstance(data_by_id.data, scipy.sparse.csr_matrix) else: assert isinstance(data_by_id.data, np.ndarray) - # np.isnan doesn't work on crs matrix - assert np.count_nonzero(np.isnan(data_by_id.data)) == \ - expected_missing + # np.isnan doesn't work on CSR matrix + assert (np.count_nonzero(np.isnan(data_by_id.data)) == + expected_missing) return data_by_id From 25bae94827056cfa96e6d9a4c7c5de5406744cdc Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 7 Aug 2018 18:03:36 -0400 Subject: [PATCH 126/138] added nominal values to openml mock files, renamed data list mock files with data_list__ prefix --- .../tests/data/openml/2/data_features.json.gz | Bin 666 -> 866 bytes ...n.gz => data_list__anneal_1_active.json.gz} | Bin ...z => data_list__anneal_None_active.json.gz} | Bin .../data/openml/292/data_features.json.gz | Bin 286 -> 306 bytes ... => data_list__australian_1_active.json.gz} | Bin ...ata_list__australian_1_deactivated.json.gz} | Bin ... data_list__australian_None_active.json.gz} | Bin .../data/openml/40589/data_features.json.gz | Bin 827 -> 856 bytes ...gz => data_list__emotions_3_active.json.gz} | Bin ...=> data_list__emotions_None_active.json.gz} | Bin .../data/openml/40675/data_features.json.gz | Bin 288 -> 307 bytes ...n.gz => data_list__glass2_1_active.json.gz} | Bin ...=> data_list__glass2_1_deactivated.json.gz} | Bin ...z => data_list__glass2_None_active.json.gz} | Bin .../data/openml/40966/data_features.json.gz | Bin 920 -> 3690 bytes ...=> data_list__miceprotein_4_active.json.gz} | Bin ...data_list__miceprotein_None_active.json.gz} | Bin .../data/openml/561/data_features.json.gz | Bin 262 -> 425 bytes ...json.gz => data_list__cpu_1_active.json.gz} | Bin ...n.gz => data_list__cpu_None_active.json.gz} | Bin .../tests/data/openml/61/data_features.json.gz | Bin 210 -> 268 bytes ...son.gz => data_list__iris_1_active.json.gz} | Bin ....gz => data_list__iris_None_active.json.gz} | Bin sklearn/datasets/tests/test_openml.py | 7 +++---- 24 files changed, 3 insertions(+), 4 deletions(-) rename sklearn/datasets/tests/data/openml/2/{anneal_1_active.json.gz => data_list__anneal_1_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/2/{anneal_None_active.json.gz => data_list__anneal_None_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/292/{australian_1_active.json.gz => data_list__australian_1_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/292/{australian_1_deactivated.json.gz => data_list__australian_1_deactivated.json.gz} (100%) rename sklearn/datasets/tests/data/openml/292/{australian_None_active.json.gz => data_list__australian_None_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/40589/{emotions_3_active.json.gz => data_list__emotions_3_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/40589/{emotions_None_active.json.gz => data_list__emotions_None_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/40675/{glass2_1_active.json.gz => data_list__glass2_1_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/40675/{glass2_1_deactivated.json.gz => data_list__glass2_1_deactivated.json.gz} (100%) rename sklearn/datasets/tests/data/openml/40675/{glass2_None_active.json.gz => data_list__glass2_None_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/40966/{miceprotein_4_active.json.gz => data_list__miceprotein_4_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/40966/{miceprotein_None_active.json.gz => data_list__miceprotein_None_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/561/{cpu_1_active.json.gz => data_list__cpu_1_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/561/{cpu_None_active.json.gz => data_list__cpu_None_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/61/{iris_1_active.json.gz => data_list__iris_1_active.json.gz} (100%) rename sklearn/datasets/tests/data/openml/61/{iris_None_active.json.gz => data_list__iris_None_active.json.gz} (100%) diff --git a/sklearn/datasets/tests/data/openml/2/data_features.json.gz b/sklearn/datasets/tests/data/openml/2/data_features.json.gz index f3c520472f9496aec35b783a2cb48bc1d4929a36..cb3d2750095bdacbfef721b7d64a6afb0e7632f6 100644 GIT binary patch literal 866 zcmV-o1D*UIiwFo92x?mZ17u-zVP9rtVRUtJWpgfSb8l_{-I-f&+aMIjpOa5fS=w7F zC3foAdt19+rfuEScGtFwu#IC@3>n6~sOop01Bq6h7)iAj(OUhFcYfg=?p}C<#=O_&RGG75Wq!WV=0KYxZ9Zz#)Vy4Nm{e1V#0*Q_ z8d~AM1!Ts!z%2!W-%Lq{nIt*E0#;yknP4&H`LrZeMcC|7t0xoRYbreqwm`>>K*!7l z&+1fetM0Jto;@X2D?fCmc-XGj2YM@sF|`zWq9p18|Dsau5qh+>TYOXLS7+T2h3)+i zfPP4kNH}Zlh`Pjrq#HGgW6=5niHzZ@>Pq`}K>H;w=glVsr?h$B(jCv-tuEoHU1tcr zjI)eLVsNylC7wQ-ao?TE4TeFx+zH%exF}IVD3P{X%}7c0RT`*ttkNBK;zv=t_-Jiq z6`0Lr(UmzFgZ4Adw$TjR&&OkT^D#C!=m>I9Rf`;@csnPIRP96cw9wD1UC-4X7sUp- zkZx9Tf7j?4lk%<7yRXs%$C%@f#|G_?bnxN_eQC>46q&#l5>Ap@ivHnFTs$#|g8-D| zof9_+O|ur#Q6f7hF7i#&5+YG@^U6OcZO>Y}j+fprGI=Oup~Uu-<_<=T4s~;Ne3AnistN-1tx6<81g0CoUf%Pud*ov+lX4Y5nve)|5zG zlkVv=O+O!E3%;Gp?k$~BY=}GgkX&*s1n-`{&@_G!UQ#YZ_v9Jfa}8gbR~mpx1eq1G z`EiW|YfMTpvJLWRra4&!P6tl6k=V42K)#{%BH+=zksccW&WDWis}?+eL7?M9(6Oa} z4b&E_LCy=(wieVWko{fNr*|LpZOzgCzPkXrAtV_<*pUTEuUe&UU_dp1D04%y?u3H_ z2r3kJ=6WoE5W>kb5OUx$lpO_zgFvuGBHViW9qJ(FP}^{6C*g4876eEgbCh1$-%x;X s?xuzB1Bf6gMTR@xXN9iy^?j>)DeC_*(3kz*L;s=w2c8&4O4%X+0L3M%7ytkO literal 666 zcmV;L0%iRliwFoC!BATO17u-zVP9rtVRUtJWpgfSb8l_{)tTFln=lZDual=(A@y!o zN^r`d573vWDrAfS@A^Oolk94hcP~j(Rhlrj&2SZrG5W_D&o?uCZZ}CIqpVsj;{7$~E|aGmkN887W^%8XT% z(CPSRksbBF3DfxidSL>>sWOfB(X>Vbe!x$z)=-7Ea%LQj@2aD;)76M1&(man==}VI z^zV`W0YWpW_;OXv&5GT!4Joo=j9OcE;)`rqy+G=fggW>|`IFON6sx^IAoab3#_Mrh zi~g@jf7EW6Ujf0|c|AKP%Cr5l9U1nb;2RSS;Yg1(LF~k`2{{g>0i3LjHIZLD75ie@ zh~h35f%aYO*K!_8q~8bsB0J6UER=*J?J< z^t^&ftg|$4}Dm!4j#MxL|&a@ z1gp6?YxwD>B2S9J>m(cvKmC;Zrx>{UeTe)*Pf-%peTtdeYJk8`e@5*;#;ytg{N$7F za|hme$&B6_OxMTx;wZt-Kgw#!uT(BdDyU)_+v!qh@-yH-q!TG7^6LblWr#J>u`rf7 zGL6tK?vT79?RO<{FW1wl7MRAdH|lLsJ;UCRz$`wQW<8xPfk|xjYP#$KQ#crgIglW7 zP;m$0z>rnc)??HTQoV6(hmu`Hfmy4pBtFp4`XfyLWBY$@H|Op7H;jwdjEEfo0BLwp Au>b%7 diff --git a/sklearn/datasets/tests/data/openml/2/anneal_1_active.json.gz b/sklearn/datasets/tests/data/openml/2/data_list__anneal_1_active.json.gz similarity index 100% rename from sklearn/datasets/tests/data/openml/2/anneal_1_active.json.gz rename to sklearn/datasets/tests/data/openml/2/data_list__anneal_1_active.json.gz diff --git a/sklearn/datasets/tests/data/openml/2/anneal_None_active.json.gz b/sklearn/datasets/tests/data/openml/2/data_list__anneal_None_active.json.gz similarity index 100% rename from sklearn/datasets/tests/data/openml/2/anneal_None_active.json.gz rename to sklearn/datasets/tests/data/openml/2/data_list__anneal_None_active.json.gz diff --git a/sklearn/datasets/tests/data/openml/292/data_features.json.gz b/sklearn/datasets/tests/data/openml/292/data_features.json.gz index 5a7138dd9d6a105b56cfc180f0d6af5fb75abf87..29016cc36bab6f488a0dec84a540a78276f7e693 100644 GIT binary patch delta 285 zcmV+&0pk9i0*0K>;a?vAg3I6xms@sNf z)+MttcQnXHt9xY`lrl(BDH)a16&Wr)$FJ zTN>KdXe*na)$b%OvWe*za4LWokQeaOf6n8Y_994Et1xT?7uDZf*S1X>sAPZRZw_4h zE_A7E(3MsWFW6{aloM?wjP_pJ`i3xvex=K2=y@DH@4)ZAFB;|a>peIE{-1n-e-pHwL))1`b;ru2Oxj^6+!DPI(a8wk`jVYYS|1}a?vAg2>$oj!n9?a zb;&I6%pjfJy%$23I%-uJ9g{af9%lDK2s!3Ho`x(Wy3&02QNGD}9yo1>wR|6QekR^N z^U$>xoo>bz1{JlhO&nIyC-XbU+O_!`S?MPHS@`x#VQE~%3XP`+F4>Fms;zjG#SqZd z>Z+TR`8}{d>E<)y2I4-#Q+Tq*Ud_(0M zF7hpvZ@I{KRKDXP-&6UXiyUZ$9)BjUZ=cpEn;wNpkpi10g-MkHn=XY(nZm2K>A4VH O(LDh9lRK#v3jhG}h<*kD diff --git a/sklearn/datasets/tests/data/openml/292/australian_1_active.json.gz b/sklearn/datasets/tests/data/openml/292/data_list__australian_1_active.json.gz similarity index 100% rename from sklearn/datasets/tests/data/openml/292/australian_1_active.json.gz rename to sklearn/datasets/tests/data/openml/292/data_list__australian_1_active.json.gz diff --git a/sklearn/datasets/tests/data/openml/292/australian_1_deactivated.json.gz b/sklearn/datasets/tests/data/openml/292/data_list__australian_1_deactivated.json.gz similarity index 100% rename from sklearn/datasets/tests/data/openml/292/australian_1_deactivated.json.gz rename to sklearn/datasets/tests/data/openml/292/data_list__australian_1_deactivated.json.gz diff --git a/sklearn/datasets/tests/data/openml/292/australian_None_active.json.gz b/sklearn/datasets/tests/data/openml/292/data_list__australian_None_active.json.gz similarity index 100% rename from sklearn/datasets/tests/data/openml/292/australian_None_active.json.gz rename to sklearn/datasets/tests/data/openml/292/data_list__australian_None_active.json.gz diff --git a/sklearn/datasets/tests/data/openml/40589/data_features.json.gz b/sklearn/datasets/tests/data/openml/40589/data_features.json.gz index 1596c148e73203502d590374d82746dcfad99d5c..155460906a7b72b46a1f7e28ab3973524a810e23 100644 GIT binary patch delta 696 zcmV;p0!RJ32G|CFABzYGn+R%K00U%UbYWj+Wnpx6a%FQaYIARH0Nt6*PUA2XM%V3A zpsZ0v94Cd@0UE@DN(hD(MUkg*gEdal$q&#$y!)h~qoOOgvR9+8yShn~92Gg|a9_ux zAXBYMms+)5t()N6!RvT53byNhdB0hY0#j!CrC$a|!Qt?KMX8F-;b5j!nVv2dp*T5C zhs8`6@+dvmWm{J!+nzq$rCqOvYs#+BwOMQrnI>&jo$GdUXsK+YcLz*fR>Nb^19kPB znykNvSsGo_6Z#wc)OA`d)50{3Df9G6*>1q=0s2$k4i5-d=*V?bSz9faC|JS~>%w*~ zC`^$f)9m7Z{5(BEp^`pSAqrLOLnTnC5+AAvg=*?UB~hr3eW+p-suLfo1cfSewTl63 z3WMb;7X#KY43?{03|J>HSYCb+!U#s_XBaSw5qddB2qPIGYZ4oXU#4DQoYu*K;Au5MIoDi{uG180}FcQcr6cS_&;!{fv3uT%PlA08hj&!+TMt_t-> zXOpH|)uz#(|BtOIOsVX@3*T2CZgoEoE>5p*zt4lidGO=ruK)1x8FW}%cmIc(zUUv- zYPFuMtXBIP8P}*dr3@%;df_rJ84>D?OyUywP;i}u~n(z^GXGhHd delta 667 zcmV;M0%ZNz2D=7-ABzYG3z}0~00U%UbYWj+Wnpx6a%FQaYIARH0Nt5SYuhjwhtJ8U zC_a}^%d(T~)&xop3zU|f#xPo}xMH%M`A?gyH}B)oC^%pDmtRlUqrjAz-uIWmU2r>p{Gn9EX*pPHRi^iwO(^EG zbhudSLf)lIUAA>)vh(f3Q`*CB_)OUqx;C5hl4;Ub)wym@OIu|deOWMhSq-m27wYOQ zHCg`*vo*S=H}ntquIsegriE!5Q|9TbvfY5!1N65XZ*K@!=*aa{SzB$lC|JS~>%n$= z6sE|LY5lN&T&8y@RMLkkM4^g(s00dC;zJdoP)&WPBns8chbl&)n)^^CC{&@VT?|-L z7%W%07_eqASgvw0V9jB$y!;}B5sc8!FkloT^m2?4MlwRyGM?KEwX|5zxNw1$R>+FR z1q-RPLRK>_OjxBQSj!+(Fx#MDC4*4GY=VMy3_=A}Q(A&m3_=A{T7ne}LIqP=g4GK` z1yfqWQ7*7TOE{_pR%Z!Ev%tzM;o}xKl@)o(1&m!pK6ZiASP|8W6Ul!t&5EdCT;T$1 ztcV)M6)dF2il|>)VUyDVu78VF`nh_0)au85v4f$Y7IC3iJg#9Vs5bNzE0e#VeHl~~ z{=h)`HmDk$G5X)tlWI)`!$ECev3mZphS_$f^xPj_A7+1@(i47oeV9C((xY4z>X*(Y zO}DE}qd)#1TUD4+*^fBdy8AmA^z437yWL^3vswW`(4)H6R_*(bPCPcs7AO$(r2g3% z-AsC{ol=|6=mpI$noVpW_}Nb?CVPO5I`z~5FL7Px7gQJ zC5}4D&8#ayrpM1D#Zol+!N54%;suq1F3=9;I%f`co*KU1bH>CG9d$>GybRz546~&` zd;B$MFgCB{hO-}%dNhF)q2qzH;0>L$N{-|`nL+MA$6O}?r^wVSSdSI!@oIaDV=44! zjQ$A*gT9~w=d8fJjw6|J_%HbRkfzR>Qt&Ss{<96>OS+#cR^SnIR}lU+!+!u*5d96K zU%PTH|CX_LIvxH=c$+>X&_D5m`ZIsiie)RBR;*gFJykKd_#X|obv4yf{SEXB^>51u F000$slequ@ literal 288 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 MzwtbY?Fs<@2WBY1umAu6 literal 920 zcmV;J184jniwFqNx=ULC17u-zVP9rtVRUtJWpgfSb8l_{)tg;!n=llHuajR+ zSL7>EbbTXQ+2)BJJ7XHhphcD|M z>qAqu-IP_aerYP(yepb}(e0a7#kv*08p``>d-yfl&}_fv<(;Uya#f0Ee?!;wKijK* zb1RyByUI6Z+m_XR{!py@Ll8U6-7U|jCxqT4^!`l}m^_b;;`bZTl*|8%|N4eM@mt6F z8R1`KX=LKyTLj;q z=TZR4)WyL!sdMY;WdMXvrCU!EBz)@J`hA3iPn{bF9?*l|q|&X!DN^rK?bc99gDH6z zD{U|(^X~YOp8S$}_p=u%07<<`3N(EgH7``!$*6d-(oROji=k{9p`(PyLHD_{Y*}v(FP($EUw40IBv}itceew}Nw^ zAgF?qBu4rVq%&6h0}wscFHbxmdU?s&bw@z_)V@`8l>*^Y_hv;8L{H5-yWl#m9IEiC zd1vcBv2gfpD&IXn(A>4Ddl#1`P~L1)>&DiY0VSTcRQP&4je*i0o0>OH{d1&0fVwx0 zv^?jg!l&xJzAeA>WvAuNiz)`G_We=3XO9gtf$A`unmC=$f#|7-UG8g0&rH=}c`9Pp zyJR{BFc~WXkj^_JEkZcbacA#B%Ob#0b-%Rzdjph4J5#E-lp#eD7(7e1iAa<|N%w)^{(E(zixy6oE=4_&FGV2cAH?PSCKBBN<(Xcl)naHOaBt#is~y;2ekHIc zU*2(^V83fn8;aPW;due2yhUz&*EkFTssHWWE>$i$uFhtMaWy-PyYK6VKb}R(6Jz^d zv45De-+jAZ3j6gt_M6A0uz#GfuW#13OJV;sXTM$0(R_XnznrW2GJ|g|gz%T}k<-6m Tf2pfueXM@~(|phHXa@iQRBg{X literal 262 zcmV+h0r~zPiwFp6mP=az17u-zVP9rtVRUtJWpgfSb8l_{)zUp{!!QsA;933^L34(D zv<+knUeY0%I<%A`F7eqMSf`?ov?chz*A|9=(xpp?#`j(!J%T$ILRR2G)d)UVbaFj8 z7edG}_wjwmLK0W_-A6f-(>P$zLoH9pm9gV6-sOKjW5Y%hLpxUFln2|OAF3K!hnIpH zHu15vu;xoqh3u&&wCMp3`hZrMT4{2QxKSr)L;OU~?2mNQNur-8`rTXk@~1s$v~;{H z`y#dPp7*)fmsj@9YcBSO#9nU7Z7%l5)V|GVX`Zg}`E1Q9!5>?2?w@#X!!7I|h3Jaz M7n-=~?FYBA5;#j*Oz;c6U`(deKQ9 zXI*LXEq*4cpLLxJ9{L$;!2z5@Z{x>8a>MvFWbDTtnVJQWmr6CQtAe+#coY@Mfq~Dq3NiYV1ldcziMHXs;3;a+cw&bZvw)5IGB9H%Z SjI*jHHK}jphA5~&1ONaW<$PNJ literal 210 zcmV;@04@I?iwFn~c0*eL17u-zVP9rtVRUtJWpgfSb8l_{&Ct0D!!Qhh;djxTq1TjG zDaEL<>DF57t|u9cEfjvaPcnSGEnE?KIOmhdHlR(Q`nzQb{WRM_tD8 M4N@FztRe#d03w%OQUCw| diff --git a/sklearn/datasets/tests/data/openml/61/iris_1_active.json.gz b/sklearn/datasets/tests/data/openml/61/data_list__iris_1_active.json.gz similarity index 100% rename from sklearn/datasets/tests/data/openml/61/iris_1_active.json.gz rename to sklearn/datasets/tests/data/openml/61/data_list__iris_1_active.json.gz diff --git a/sklearn/datasets/tests/data/openml/61/iris_None_active.json.gz b/sklearn/datasets/tests/data/openml/61/data_list__iris_None_active.json.gz similarity index 100% rename from sklearn/datasets/tests/data/openml/61/iris_None_active.json.gz rename to sklearn/datasets/tests/data/openml/61/data_list__iris_None_active.json.gz diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 9f909bc4cbd4c..8b45494dfb191 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -134,10 +134,9 @@ def _mock_urlopen_data_list(url): key_val_dict['data_version'] = None if 'status' not in key_val_dict: key_val_dict['status'] = "active" - mock_file = "%s_%s_%s.json%s" % (key_val_dict['data_name'], - key_val_dict['data_version'], - key_val_dict['status'], - path_suffix) + mock_file = "data_list__%s_%s_%s.json%s" % \ + (key_val_dict['data_name'], key_val_dict['data_version'], + key_val_dict['status'], path_suffix) json_file_path = os.path.join(currdir, 'data', 'openml', str(data_id), mock_file) # load the file itself, to simulate a http error From 2881936cb44e5b80e73af4d898644d93150a1fe2 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 7 Aug 2018 21:50:27 -0400 Subject: [PATCH 127/138] upgraded liac arff, added (rather slow) unit test checking the decoding of arff to string values raises error when missing values in target column added note regarding experimental --- sklearn/datasets/openml.py | 26 +- sklearn/datasets/tests/test_openml.py | 70 +++- sklearn/externals/_arff.py | 547 ++++++++++++++------------ 3 files changed, 373 insertions(+), 270 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index bf36279b2978e..69525ae9daf00 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -290,9 +290,11 @@ def _get_data_features(data_id, data_home): return json_data['data_features']['feature'] -def _download_data_arff(file_id, sparse, data_home): +def _download_data_arff(file_id, sparse, data_home, encode_nominal=True): # Accesses an ARFF file on the OpenML server. Documentation: # https://www.openml.org/api_data_docs#!/data/get_download_id + # encode_nominal argument is to ensure unit testing, do not alter in + # production! url = _DATA_FILE.format(file_id) response = _open_openml_url(url, data_home) if sparse is True: @@ -301,11 +303,11 @@ def _download_data_arff(file_id, sparse, data_home): return_type = _arff.DENSE if PY2: - arff_file = _arff.load(response, encode_nominal=True, + arff_file = _arff.load(response, encode_nominal=encode_nominal, return_type=return_type, ) else: arff_file = _arff.loads(response.read().decode('utf-8'), - encode_nominal=True, + encode_nominal=encode_nominal, return_type=return_type) response.close() return arff_file @@ -349,6 +351,10 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, (not both). In case a name is given, a version can also be provided. + NOTE: he API is experimental in version 0.20 (particularly the return value + structure), and might have small backward-incompatible changes in future + releases. + Parameters ---------- name : str or None @@ -399,8 +405,9 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, details : dict More metadata from OpenML - Missing values in the 'data' and 'target' field are represented as - NaN's. + Missing values in the 'data' are represented as NaN's. Missing values + in 'target' are represented as NaN's (numerical target) or None + (categorical target) """ data_home = get_data_home(data_home=data_home) data_home = join(data_home, 'openml') @@ -477,6 +484,13 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, col_slice_x = [int(features_dict[col_name]['index']) for col_name in data_columns] + for col_idx in col_slice_y: + feat = features_list[col_idx] + if int(feat['number_of_missing_values']) > 0: + raise ValueError('Target feature {} has {} missing values. ' + 'Hidden values are not supported for target ' + 'columns. '.format(feat['name'], + feat['missing_values'])) # determine arff encoding to return return_sparse = False @@ -522,7 +536,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, bunch = Bunch( data=X, target=y, feature_names=data_columns, - DESCR=description, details=data_description, features=features_list, + DESCR=description, details=data_description, categories=nominal_attributes, url="https://www.openml.org/d/{}".format(data_id)) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 8b45494dfb191..9f4ea6b81cb41 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -8,7 +8,9 @@ import sklearn from sklearn.datasets import fetch_openml -from sklearn.datasets.openml import _get_data_features, _open_openml_url +from sklearn.datasets.openml import (_open_openml_url, + _get_data_description_by_id, + _download_data_arff) from sklearn.utils.testing import (assert_warns_message, assert_raise_message) from sklearn.externals.six import string_types @@ -21,6 +23,43 @@ test_gzip = True +def _test_features_list(data_id): + # XXX Test is intended to verify/ensure correct decoding behavior + # Not usable with sparse data or datasets that have columns marked as + # {row_identifier, ignore} + def decode_column(data_bunch, col_idx): + col_name = data_bunch.feature_names[col_idx] + if col_name in data_bunch.categories: + # XXX: This would be faster with np.take, although it does not + # handle missing values fast (also not with mode='wrap') + cat = data_bunch.categories[col_name] + result = [cat[idx] if 0 <= idx < len(cat) else None for idx in + data_bunch.data[:, col_idx].astype(int)] + return np.array(result, dtype='O') + else: + # non-nominal attribute + return data_bunch.data[:, col_idx] + + data_bunch = fetch_openml(data_id=data_id, cache=False, target_column=None) + + # also obtain decoded arff + data_description = _get_data_description_by_id(data_id, None) + sparse = data_description['format'].lower() == 'sparse_arff' + if sparse is True: + raise ValueError('This test is not intended for sparse data, to keep ' + 'code relatively simple') + data_arff = _download_data_arff(data_description['file_id'], + sparse, None, False) + data_downloaded = np.array(data_arff['data'], dtype='O') + + for i in range(len(data_bunch.feature_names)): + # XXX: Test per column, as this makes it easier to avoid problems with + # missing values + + np.testing.assert_array_equal(data_downloaded[:, i], + decode_column(data_bunch, i)) + + def _fetch_dataset_from_openml(data_id, data_name, data_version, target_column, expected_observations, expected_features, @@ -59,7 +98,6 @@ def _fetch_dataset_from_openml(data_id, data_name, data_version, # TODO: pass in a list of expected nominal features for feature, categories in data_by_id.categories.items(): - print(feature, data_by_id.feature_names) feature_idx = data_by_id.feature_names.index(feature) values = np.unique(data_by_id.data[:, feature_idx]) values = values[np.isfinite(values)] @@ -183,6 +221,11 @@ def test_fetch_openml_iris(monkeypatch): compare_default_target=True) +def test_decode_iris(): + data_id = 61 + _test_features_list(data_id) + + def test_fetch_openml_iris_multitarget(monkeypatch): # classification dataset with numeric only columns data_id = 61 @@ -219,6 +262,11 @@ def test_fetch_openml_anneal(monkeypatch): compare_default_target=True) +def test_decode_anneal(): + data_id = 2 + _test_features_list(data_id) + + def test_fetch_openml_anneal_multitarget(monkeypatch): # classification dataset with numeric and categorical columns data_id = 2 @@ -254,6 +302,11 @@ def test_fetch_openml_cpu(monkeypatch): compare_default_target=True) +def test_decode_cpu(): + data_id = 561 + _test_features_list(data_id) + + def test_fetch_openml_australian(monkeypatch): # sparse dataset # Australian is the only sparse dataset that is reasonably small @@ -325,6 +378,11 @@ def test_fetch_openml_emotions(monkeypatch): compare_default_target=True) +def test_decode_emotions(): + data_id = 40589 + _test_features_list(data_id) + + def test_open_openml_url_cache(monkeypatch): data_id = 61 @@ -427,6 +485,13 @@ def test_illegal_column(monkeypatch): cache=False) +def test_fetch_openml_raises_missing_values_target(monkeypatch): + data_id = 2 + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) + assert_raise_message(ValueError, "Dataset data_id=", + fetch_openml, data_id=data_id, target_column='family') + + def test_fetch_openml_raises_illegal_argument(): assert_raise_message(ValueError, "Dataset data_id=", fetch_openml, data_id=-1, name="name") @@ -441,3 +506,4 @@ def test_fetch_openml_raises_illegal_argument(): assert_raise_message(ValueError, "Neither name nor data_id are provided. " "Please provide name or data_id.", fetch_openml) + diff --git a/sklearn/externals/_arff.py b/sklearn/externals/_arff.py index 2446a2da6bcc2..fe0e2c2d4a8d9 100644 --- a/sklearn/externals/_arff.py +++ b/sklearn/externals/_arff.py @@ -138,17 +138,19 @@ - Supports read and write the descriptions of files; - Supports missing values and names with spaces; - Supports unicode values and names; -- Fully compatible with Python 2.7+ and Python 3.4+; +- Fully compatible with Python 2.7+, Python 3.3+, pypy and pypy3; - Under `MIT License `_ ''' -__author__ = 'Renato de Pontes Pereira, Matthias Feurer' -__author_email__ = 'renato.ppontes@gmail.com, feurerm@informatik.uni-freiburg.de' -__version__ = '2.2.2' +__author__ = 'Renato de Pontes Pereira, Matthias Feurer, Joel Nothman' +__author_email__ = ('renato.ppontes@gmail.com, ' + 'feurerm@informatik.uni-freiburg.de, ' + 'joel.nothman@gmail.com') +__version__ = '2.3' -import csv import re import sys +import csv # CONSTANTS =================================================================== _SIMPLE_TYPES = ['NUMERIC', 'REAL', 'INTEGER', 'STRING'] @@ -158,27 +160,107 @@ _TK_RELATION = '@RELATION' _TK_ATTRIBUTE = '@ATTRIBUTE' _TK_DATA = '@DATA' -_TK_VALUE = '' _RE_RELATION = re.compile(r'^([^\{\}%,\s]*|\".*\"|\'.*\')$', re.UNICODE) _RE_ATTRIBUTE = re.compile(r'^(\".*\"|\'.*\'|[^\{\}%,\s]*)\s+(.+)$', re.UNICODE) _RE_TYPE_NOMINAL = re.compile(r'^\{\s*((\".*\"|\'.*\'|\S*)\s*,\s*)*(\".*\"|\'.*\'|\S*)\s*\}$', re.UNICODE) -_RE_ESCAPE = re.compile(r'\\\'|\\\"|\\\%|[\\"\'%]') -_RE_QUOTATION_MARKS = re.compile(r''''|"''', re.UNICODE) -_RE_REPLACE_FIRST_QUOTATION_MARK = re.compile(r'^(\'|\")') -_RE_REPLACE_LAST_QUOTATION_MARK = re.compile(r'(\'|\")$') - -_ESCAPE_DCT = { - ',': ',', - ' ': ' ', - "'": "\\'", - '"': '\\"', - '%': '\\%', - '\\': '\\', - '\\\'': '\\\'', - '\\"': '\\"', - '\\%': '\\%', -} +_RE_QUOTE_CHARS = re.compile(r'["\'\\ \t%,]') +_RE_ESCAPE_CHARS = re.compile(r'(?=["\'\\%])') # don't need to capture anything +_RE_SPARSE_LINE = re.compile(r'^\{.*\}$') +_RE_NONTRIVIAL_DATA = re.compile('["\'{}\\s]') + + +def _build_re_values(): + quoted_re = r'''(?x) + " # open quote followed by zero or more of: + (?: + (?= len(conversors): + raise BadDataFormat(s) + # XXX: int 0 is used for implicit values, not '0' + values = [values[i] if i in values else 0 for i in xrange(len(conversors))] - # dense lines are decoded one by one else: if len(values) != len(conversors): - raise BadDataFormat() - values = [conversors[i](values[i]) for i in xrange(len(values))] + raise BadDataFormat(s) - self.data.append(values) + self.data.append(self._decode_values(values, conversors)) - def _get_values(self, s): - '''(INTERNAL) Split a line into a list of values''' - if _RE_QUOTATION_MARKS.search(s): - return _read_csv(s.strip(' ')) - else: - return next(csv.reader([s.strip(' ')])) + @staticmethod + def _decode_values(values, conversors): + try: + values = [None if value is None else conversor(value) + for conversor, value + in zip(conversors, values)] + except ValueError as exc: + if 'float: ' in str(exc): + raise BadNumericalValue() + return values + + def _tuplify_sparse_data(self, x): + if len(x) != 2: + raise BadDataFormat(x) + return (int(x[0].strip('"').strip("'")), x[1]) def encode_data(self, data, attributes): '''(INTERNAL) Encodes a line of data. @@ -378,24 +464,24 @@ def encode_data(self, data, attributes): :param attributes: a list of attributes. Used to check if data is valid. :return: a string with the encoded data line. ''' + current_row = 0 + for inst in data: if len(inst) != len(attributes): - raise BadObject('len(inst) = {} != len(attributes) {}'.format( - len(inst), len(attributes), - )) + raise BadObject( + 'Instance %d has %d attributes, expected %d' % + (current_row, len(inst), len(attributes)) + ) new_data = [] for value in inst: if value is None or value == u'' or value != value: s = '?' else: - s = unicode(value) - for escape_char in _ESCAPE_DCT: - if escape_char in s: - s = encode_string(s) - break + s = encode_string(unicode(value)) new_data.append(s) + current_row += 1 yield u','.join(new_data) class COOData(Data): @@ -404,20 +490,24 @@ def __init__(self): self._current_num_data_points = 0 def decode_data(self, s, conversors): - values = self._get_values(s) + values = _parse_values(s) - if not values[0][0].strip(" ") == '{': + if not isinstance(values, dict): raise BadLayout() - elif s.replace(' ', '') == '{}': + if not values: self._current_num_data_points += 1 return - - vdict = dict(map(lambda x: (int(x[0]), x[1]), - [i.strip("{").strip("}").strip(" ").split(' ') - for i in values])) - col = sorted(vdict) - values = [conversors[key](unicode(vdict[key])) - for key in sorted(vdict)] + col, values = zip(*sorted(values.items())) + try: + values = [value if value is None else conversors[key](value) + for key, value in zip(col, values)] + except ValueError as exc: + if 'float: ' in str(exc): + raise BadNumericalValue() + raise + except IndexError: + # conversor out of range + raise BadDataFormat(s) self.data[0].extend(values) self.data[1].extend([self._current_num_data_points] * len(values)) self.data[2].extend(col) @@ -447,16 +537,15 @@ def encode_data(self, data, attributes): current_row += 1 if col >= num_attributes: - raise BadObject() + raise BadObject( + 'Instance %d has at least %d attributes, expected %d' % + (current_row, col + 1, num_attributes) + ) if v is None or v == u'' or v != v: s = '?' else: - s = unicode(v) - for escape_char in _ESCAPE_DCT: - if escape_char in s: - s = encode_string(s) - break + s = encode_string(unicode(v)) new_data.append("%d %s" % (col, s)) yield " ".join([u"{", u','.join(new_data), u"}"]) @@ -466,41 +555,44 @@ def __init__(self): self.data = [] def decode_data(self, s, conversors): - values = self._get_values(s) + values = _parse_values(s) + n_conversors = len(conversors) - if not values[0][0].strip(" ") == '{': + if not isinstance(values, dict): raise BadLayout() - elif s.replace(' ', '') == '{}': - self.data.append({}) - return - - vdict = dict(map(lambda x: (int(x[0]), x[1]), - [i.strip("{").strip("}").strip(" ").split(' ') - for i in values])) - for key in vdict: - vdict[key] = conversors[key](vdict[key]) - self.data.append(vdict) + try: + self.data.append({key: None if value is None else conversors[key](value) + for key, value in values.items()}) + except ValueError as exc: + if 'float: ' in str(exc): + raise BadNumericalValue() + raise + except IndexError: + # conversor out of range + raise BadDataFormat(s) def encode_data(self, data, attributes): + current_row = 0 + num_attributes = len(attributes) for row in data: new_data = [] if len(row) > 0 and max(row) >= num_attributes: - raise BadObject() + raise BadObject( + 'Instance %d has %d attributes, expected %d' % + (current_row, max(row) + 1, num_attributes) + ) for col in sorted(row): v = row[col] if v is None or v == u'' or v != v: s = '?' else: - s = unicode(v) - for escape_char in _ESCAPE_DCT: - if escape_char in s: - s = encode_string(s) - break + s = encode_string(unicode(v)) new_data.append("%d %s" % (col, s)) + current_row += 1 yield " ".join([u"{", u','.join(new_data), u"}"]) def _get_data_object_for_decoding(matrix_type): @@ -518,88 +610,13 @@ def _get_data_object_for_encoding(matrix): if hasattr(matrix, 'format'): if matrix.format == 'coo': return COOData() + else: + raise ValueError('Cannot guess matrix format!') elif isinstance(matrix[0], dict): return LODData() else: return Data() -def _read_csv(line): - # TODO document - # TODO add unit tests - # * mixed single quotes and double quotes - # * escaped characters! - # * does it behave like the regular csv reader? - values = [] - quoted = False - i = 0 - token = '' - quote_token = False - comma_expected = False - only_whitespace = True - - while i < len(line): - line_i = line[i] - if line_i == ',' and not quoted: - if quote_token: - values.append(u"%s%s%s" % (quote_token, token, quote_token)) - else: - values.append(token) - token = '' - i += 1 - quote_token = False - only_whitespace = True - comma_expected = False - elif comma_expected: - if line_i in (' ', '\t', '\n', '\r'): - i += 1 - else: - print(line_i, i, line) - raise BadLayout() - # Escape character - elif line_i == '\\': - if len(line) == i+1: - raise BadLayout() - if len(line) > i+2 and line[i+1] == '\\': - # Do not trim the escape character for escaping the escape character - token += line[i: i + 2] - else: - token += line[i+1: i+2] - i += 2 - # Quoting - elif line_i in ("'", '"') and (not quoted or line_i == quoted): - if only_whitespace is False: - raise ValueError( - 'Only whitespace allowed before quoting character at ' - 'index %d in line: %s' % (i, line)) - if quoted is False: - token = '' - quoted = line_i - quote_token = line_i - elif quoted == line_i: - quoted = False - comma_expected = True - else: - raise ValueError( - 'Inconsistent use of single quotes and double quotes for ' - 'line at character %d: %s' % (i, line) - ) - i += 1 - elif quoted: - token += line_i - i += 1 - else: - if line_i not in (' ', '\t', '\n', '\r'): - only_whitespace = False - token += line_i - i += 1 - if quoted: - raise ValueError('Quote not closed for line: %s' % line) - if quote_token: - values.append(u"%s%s%s" % (quote_token, token, quote_token)) - else: - values.append(token) - return values - # ============================================================================= # ADVANCED INTERFACE ========================================================== @@ -619,7 +636,7 @@ def _decode_comment(self, s): characters. This method must receive a normalized string, i.e., a string without - padding, including the "\r\n" characters. + padding, including the "\r\n" characters. :param s: a normalized string. :return: a string with the decoded comment. @@ -630,13 +647,13 @@ def _decode_comment(self, s): def _decode_relation(self, s): '''(INTERNAL) Decodes a relation line. - The relation declaration is a line with the format ``@RELATION + The relation declaration is a line with the format ``@RELATION ``, where ``relation-name`` is a string. The string must start with alphabetic character and must be quoted if the name includes spaces, otherwise this method will raise a `BadRelationFormat` exception. This method must receive a normalized string, i.e., a string without - padding, including the "\r\n" characters. + padding, including the "\r\n" characters. :param s: a normalized string. :return: a string with the decoded relation name. @@ -653,12 +670,12 @@ def _decode_relation(self, s): def _decode_attribute(self, s): '''(INTERNAL) Decodes an attribute line. - The attribute is the most complex declaration in an arff file. All + The attribute is the most complex declaration in an arff file. All attributes must follow the template:: @attribute - where ``attribute-name`` is a string, quoted if the name contains any + where ``attribute-name`` is a string, quoted if the name contains any whitespace, and ``datatype`` can be: - Numerical attributes as ``NUMERIC``, ``INTEGER`` or ``REAL``. @@ -666,13 +683,13 @@ def _decode_attribute(self, s): - Dates (NOT IMPLEMENTED). - Nominal attributes with format: - {, , , ...} + {, , , ...} The nominal names follow the rules for the attribute names, i.e., they must be quoted if the name contains whitespaces. This method must receive a normalized string, i.e., a string without - padding, including the "\r\n" characters. + padding, including the "\r\n" characters. :param s: a normalized string. :return: a tuple (ATTRIBUTE_NAME, TYPE_OR_VALUES). @@ -693,16 +710,12 @@ def _decode_attribute(self, s): # Extracts the final type if _RE_TYPE_NOMINAL.match(type_): - values = _read_csv(type_.strip('{} ')) - values = [ - unicode( - re.sub(_RE_REPLACE_LAST_QUOTATION_MARK, '', - re.sub(_RE_REPLACE_FIRST_QUOTATION_MARK, '', v_.strip(' ')) - ) - ) - for v_ in values - ] - type_ = values + try: + type_ = _parse_values(type_.strip('{} ')) + except Exception: + raise BadAttributeType() + if isinstance(type_, dict): + raise BadAttributeType() else: # If not nominal, verify the type name @@ -729,6 +742,7 @@ def _decode(self, s, encode_nominal=False, matrix_type=DENSE): u'attributes': [], u'data': [] } + attribute_names = {} # Create the data helper object data = _get_data_object_for_decoding(matrix_type) @@ -765,15 +779,23 @@ def _decode(self, s, encode_nominal=False, matrix_type=DENSE): STATE = _TK_ATTRIBUTE attr = self._decode_attribute(row) + if attr[0] in attribute_names: + raise BadAttributeName(attr[0], attribute_names[attr[0]]) + else: + attribute_names[attr[0]] = self._current_line obj['attributes'].append(attr) if isinstance(attr[1], (list, tuple)): if encode_nominal: - conversor = Conversor('ENCODED_NOMINAL', attr[1]) + conversor = EncodedNominalConversor(attr[1]) else: - conversor = Conversor('NOMINAL', attr[1]) + conversor = NominalConversor(attr[1]) else: - conversor = Conversor(attr[1]) + CONVERSOR_MAP = {'STRING': unicode, + 'INTEGER': lambda x: int(float(x)), + 'NUMERIC': float, + 'REAL': float} + conversor = CONVERSOR_MAP[attr[1]] self._conversors.append(conversor) # ----------------------------------------------------------------- @@ -821,12 +843,10 @@ def decode(self, s, encode_nominal=False, return_type=DENSE): dataset. Can be one of `arff.DENSE`, `arff.COO` and `arff.LOD`. Consult the section on `working with sparse data`_ ''' - try: return self._decode(s, encode_nominal=encode_nominal, matrix_type=return_type) except ArffException as e: - # print e e.line = self._current_line raise e @@ -854,8 +874,8 @@ def _encode_comment(self, s=''): def _encode_relation(self, name): '''(INTERNAL) Decodes a relation line. - The relation declaration is a line with the format ``@RELATION - ``, where ``relation-name`` is a string. + The relation declaration is a line with the format ``@RELATION + ``, where ``relation-name`` is a string. :param name: a string. :return: a string with the encoded relation declaration. @@ -881,7 +901,7 @@ def _encode_attribute(self, name, type_): - Dates (NOT IMPLEMENTED). - Nominal attributes with format: - {, , , ...} + {, , , ...} This method must receive a the name of the attribute and its type, if the attribute type is nominal, ``type`` must be a list of values. @@ -898,12 +918,7 @@ def _encode_attribute(self, name, type_): if isinstance(type_, (tuple, list)): type_tmp = [] for i in range(len(type_)): - type_i = type_[i] - for escape_char in _ESCAPE_DCT: - if escape_char in type_[i]: - type_i = encode_string(type_[i]) - break - type_tmp.append(u'%s' % type_i) + type_tmp.append(u'%s' % encode_string(type_[i])) type_ = u'{%s}'%(u', '.join(type_tmp)) return u'%s %s %s'%(_TK_ATTRIBUTE, name, type_) @@ -921,7 +936,7 @@ def encode(self, obj): def iter_encode(self, obj): '''The iterative version of `arff.ArffEncoder.encode`. - This encodes iteratively a given object and return, one-by-one, the + This encodes iteratively a given object and return, one-by-one, the lines of the ARFF file. :param obj: the object containing the ARFF information. @@ -942,7 +957,8 @@ def iter_encode(self, obj): # ATTRIBUTES if not obj.get('attributes'): raise BadObject('Attributes not found.') - + + attribute_names = set() for attr in obj['attributes']: # Verify for bad object format if not isinstance(attr, (tuple, list)) or \ @@ -959,6 +975,13 @@ def iter_encode(self, obj): elif not isinstance(attr[1], (tuple, list)): raise BadObject('Invalid attribute type "%s"'%str(attr)) + # Verify attribute name is not used twice + if attr[0] in attribute_names: + raise BadObject('Trying to use attribute name "%s" for the ' + 'second time.' % str(attr[0])) + else: + attribute_names.add(attr[0]) + yield self._encode_attribute(attr[0], attr[1]) yield u'' attributes = obj['attributes'] From d7ce597752af5165168fb10b95059dc6d7ef503b Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 7 Aug 2018 21:52:59 -0400 Subject: [PATCH 128/138] tiny typo fix --- sklearn/datasets/openml.py | 10 +++++----- sklearn/datasets/tests/test_openml.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 69525ae9daf00..591d549cf6b12 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -486,11 +486,11 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, for col_name in data_columns] for col_idx in col_slice_y: feat = features_list[col_idx] - if int(feat['number_of_missing_values']) > 0: - raise ValueError('Target feature {} has {} missing values. ' - 'Hidden values are not supported for target ' - 'columns. '.format(feat['name'], - feat['missing_values'])) + nr_missing = int(feat['number_of_missing_values']) + if nr_missing > 0: + raise ValueError('Target column {} has {} missing values. ' + 'Missing values are not supported for target ' + 'columns. '.format(feat['name'], nr_missing)) # determine arff encoding to return return_sparse = False diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 9f4ea6b81cb41..a2f3ffd90290b 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -488,7 +488,7 @@ def test_illegal_column(monkeypatch): def test_fetch_openml_raises_missing_values_target(monkeypatch): data_id = 2 _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) - assert_raise_message(ValueError, "Dataset data_id=", + assert_raise_message(ValueError, "Target column ", fetch_openml, data_id=data_id, target_column='family') From 261448d1eaaeaff85ce226b4d89a1f84688ea1ae Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Tue, 7 Aug 2018 22:15:32 -0400 Subject: [PATCH 129/138] flake8 fix --- sklearn/datasets/tests/test_openml.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index a2f3ffd90290b..30724de67f180 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -506,4 +506,3 @@ def test_fetch_openml_raises_illegal_argument(): assert_raise_message(ValueError, "Neither name nor data_id are provided. " "Please provide name or data_id.", fetch_openml) - From 7624af7797379e62e25d6b6516e5d2a0e825f0b1 Mon Sep 17 00:00:00 2001 From: janvanrijn Date: Wed, 8 Aug 2018 12:32:30 -0400 Subject: [PATCH 130/138] incorporated additional raise from https://github.com/renatopp/liac-arff/pull/80 --- sklearn/externals/_arff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/externals/_arff.py b/sklearn/externals/_arff.py index fe0e2c2d4a8d9..6225dfc3691c3 100644 --- a/sklearn/externals/_arff.py +++ b/sklearn/externals/_arff.py @@ -259,7 +259,7 @@ def _parse_values(s): for match in _RE_DENSE_VALUES.finditer(s): if match.group(2): raise BadLayout('Error parsing %r' % match.group()) - raise + raise BadLayout('Unknown parsing error') DENSE = 0 # Constant value representing a dense matrix From 40c11dd89e278eaa9bae4ebe0e7aa184975e8b02 Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Mon, 13 Aug 2018 12:50:13 +1000 Subject: [PATCH 131/138] DOC note return value is experimental --- sklearn/datasets/openml.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 591d549cf6b12..08480cdfae05e 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -389,7 +389,8 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, ------- data : Bunch - Dictionary-like object, the interesting attributes are: + Dictionary-like object, with attributes: + data : np.array or scipy.sparse.csr_matrix of floats The feature matrix. Categorical features are encoded as ordinals. target : np.array @@ -405,6 +406,13 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, details : dict More metadata from OpenML + .. note:: EXPERIMENTAL + + This interface is **experimental** as at version 0.20 and + subsequent releases may change attributes without notice + (although there should only be minor changes to ``data`` + and ``target``). + Missing values in the 'data' are represented as NaN's. Missing values in 'target' are represented as NaN's (numerical target) or None (categorical target) From 4f7003b602b87b6187a993a2ee43b4ae7e30f326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Mon, 13 Aug 2018 10:10:24 +0200 Subject: [PATCH 132/138] Fix flake8 --- sklearn/datasets/openml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 08480cdfae05e..8b4c3b1ce2de4 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -390,7 +390,7 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, data : Bunch Dictionary-like object, with attributes: - + data : np.array or scipy.sparse.csr_matrix of floats The feature matrix. Categorical features are encoded as ordinals. target : np.array From a9f3a2c3fcaea5faa3569a0b303eb7f55b99a082 Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Wed, 15 Aug 2018 14:16:22 +1000 Subject: [PATCH 133/138] Remove obsolete FIXME --- sklearn/datasets/openml.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 8b4c3b1ce2de4..89b4b50ed7e08 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -196,8 +196,6 @@ def _convert_arff_data(arff_data, col_slice_x, col_slice_y): y : np.array """ if isinstance(arff_data, list): - # FIXME: It would be better to use structured arrays, to circumvent - # using an dtype=object array data = np.array(arff_data, dtype=np.float64) X = np.array(data[:, col_slice_x], dtype=np.float64) y = np.array(data[:, col_slice_y], dtype=np.float64) From bd1a18951eb76fcf095a8d2ad82fab5c987f8215 Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Wed, 15 Aug 2018 14:36:49 +1000 Subject: [PATCH 134/138] Better error message with string attributes --- sklearn/datasets/openml.py | 11 ++++++++--- .../datasets/tests/data/openml/40945/data.arff.gz | Bin 0 -> 366 bytes .../data/openml/40945/data_description.json.gz | Bin 0 -> 437 bytes .../tests/data/openml/40945/data_features.json.gz | Bin 0 -> 320 bytes .../40945/data_list__titanic_1_active.json.gz | Bin 0 -> 286 bytes sklearn/datasets/tests/test_openml.py | 9 +++++++++ 6 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 sklearn/datasets/tests/data/openml/40945/data.arff.gz create mode 100644 sklearn/datasets/tests/data/openml/40945/data_description.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40945/data_features.json.gz create mode 100644 sklearn/datasets/tests/data/openml/40945/data_list__titanic_1_active.json.gz diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 89b4b50ed7e08..653949c63a3a4 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -458,15 +458,20 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, # download data features, meta-info about column types features_list = _get_data_features(data_id, data_home) + for feature in features_list: + if 'true' in (feature['is_ignore'], feature['is_row_identifier']): + continue + if feature['data_type'] == 'string': + raise ValueError('STRING attributes are not yet supported') + if target_column == "default-target": # determines the default target based on the data feature results # (which is currently more reliable than the data description; # see issue: https://github.com/openml/OpenML/issues/768) target_column = [feature['name'] for feature in features_list if feature['is_target'] == 'true'] - - # for code-simplicity, make target_column by default a list - if isinstance(target_column, string_types): + elif isinstance(target_column, string_types): + # for code-simplicity, make target_column by default a list target_column = [target_column] elif target_column is None: target_column = [] diff --git a/sklearn/datasets/tests/data/openml/40945/data.arff.gz b/sklearn/datasets/tests/data/openml/40945/data.arff.gz new file mode 100644 index 0000000000000000000000000000000000000000..ef170f47e63dded25e3068b1871ffa1c55da31b7 GIT binary patch literal 366 zcmV-!0g?V6iwFp9t#exf17u-zVJ=~EW@Z45kWp*GFc8Pz{S+ZDc?n%pr_Lwc%D{&? zCl2;}ZBH9)6G_stG4|be>ezHtkZ>f&-T!{~&(vWBL0iK_A$n5?!Rf3C$iyzMz01I9%si*x&`A⁢sv;&uy z-KC)OEr!lz*5EFna>%sl)L@-~+a6qtlng8>R{tDi7P^6%Ek3$|rL8e4(EsUr(*gqY zlvI-6R}~t`=Gyy+JyzO7hM{C{Pz7tae2T~? zh<4+o+oUwNkPusO!6=$IZe!K4BYT{JR{Px08hFO>tl}C+WwIpFtKCDJoQT5*_%k%q)qw{&*W(N=Ul6@?) zPvE^WCj0D*o9sBc2}1TBg0opBY@R>3=%q>%KfZ$k;ylPs2h?m`Vw@T1xtI8YsD z<6!70khJTjtai6md0REdvTCbcd)JW1XsN7B{jae%YZTENDid2+;jY(f;bvtgQ#gMX zJOwQHQqjv@ZTdp+s(HIwDPOeI>W->FL!UPN}oUI066w21(b} literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/data/openml/40945/data_features.json.gz b/sklearn/datasets/tests/data/openml/40945/data_features.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..24cb46957f27d595d63e0c11a68c0894f259afb0 GIT binary patch literal 320 zcmV-G0l)qqiwFq&sB>Ea|1>Z;G&KOtlu>VkAQXlF3(w6`ZR=eB%F>XlT>}>@q-c`IMtx48= zgl1UiEXcfbSc${ZgBoc>@eJ0rB%yf%Giq3sD|K9tA!O1<*|Y!c)xq=13a{9-I@8fH zL5;C8m1c*4>f|{^h3>bJ_00Q%pvvnusNNlwq4H)Q-9pxLM^%A}7OW(I`fyMs6eJ@# zmF$yaSfXCJV_Sf_z1X5_e8rH=>-VCASlPEa|1kiakWov+Fc8Pz`zgjf4{6t?c6}3};KLN0=z|Qob(x-| zDJE%Qj(&HOwiCv-TFgT(`QQD2x!fK$Xb{qU8#OnOzIqe8tUwz`BYz&TsZ&5=!6Ahw zGAJpBPOQ1oR7yyL?ye1*O4~Bb4b{A_+Lo$7i-w!WEbFvZCc)p_E0Z8jX7M#+zp1YZ z1)1HUo35k2g9Uz;$|i3GYQ3ayejq}PqH-09Kfm&!6`OXS9s@}J0bssA1h}t?HCGSY z7Qpq1eKy9NaXTt?#vMds?03@6TIT2c;qdoQ2rpzl7Nj-F_h-lWKXRB7CX9`t*vJ*- k7Y7uNfh>2$x)cMH@R;J(sy}tgs_`1{2c9d}dm#e=04_R+_5c6? literal 0 HcmV?d00001 diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 30724de67f180..7f978ef0595c6 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -472,6 +472,15 @@ def test_warn_ignore_attribute(monkeypatch): cache=False) +def test_string_attribute(monkeypatch): + data_id = 40945 + _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) + # single column test + assert_raise_message(ValueError, + 'STRING attributes are not yet supported', + fetch_openml, data_id=data_id, cache=False) + + def test_illegal_column(monkeypatch): data_id = 61 _monkey_patch_webbased_functions(monkeypatch, data_id, test_gzip) From 143c19b2cae480912efe3032c807b348a9e56e1c Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Wed, 15 Aug 2018 14:40:52 +1000 Subject: [PATCH 135/138] cosmit --- sklearn/datasets/openml.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 653949c63a3a4..9eb57471e7cea 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -349,9 +349,11 @@ def fetch_openml(name=None, version='active', data_id=None, data_home=None, (not both). In case a name is given, a version can also be provided. - NOTE: he API is experimental in version 0.20 (particularly the return value - structure), and might have small backward-incompatible changes in future - releases. + .. note:: EXPERIMENTAL + + The API is experimental in version 0.20 (particularly the return value + structure), and might have small backward-incompatible changes in + future releases. Parameters ---------- From 1789421d26fa625c409f86d5526c9c77614c1447 Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Wed, 15 Aug 2018 14:44:19 +1000 Subject: [PATCH 136/138] DOC clean what's new merge mess --- doc/whats_new/v0.20.rst | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/doc/whats_new/v0.20.rst b/doc/whats_new/v0.20.rst index f7d46159f9ad2..6292080f0d001 100644 --- a/doc/whats_new/v0.20.rst +++ b/doc/whats_new/v0.20.rst @@ -104,29 +104,10 @@ Support for Python 3.3 has been officially dropped. Linkage clustering via ``linkage='single'``. :issue:`9372` by :user:`Leland McInnes ` and :user:`Steve Astels `. - -- :class:`ensemble.BaggingRegressor` and :class:`ensemble.BaggingClassifier` can now - be fit with missing/non-finite values in X and/or multi-output Y to support - wrapping pipelines that perform their own imputation. - :issue:`9707` by :user:`Jimmy Wan `. - - -Preprocessing - -- Expanded :class:`preprocessing.OneHotEncoder` to allow to encode - categorical string features as a numeric array using a one-hot (or dummy) - encoding scheme, and added :class:`preprocessing.OrdinalEncoder` to - convert to ordinal integers. Those two classes now handle - encoding of all feature types (also handles string-valued features) and - derives the categories based on the unique values in the features instead of - the maximum value in the features. :issue:`9151` and :issue:`10521` by - :user:`Vighnesh Birodkar ` and `Joris Van den Bossche`_. - - |Feature| :class:`cluster.KMeans` and :class:`cluster.MiniBatchKMeans` now support sample weights via new parameter ``sample_weight`` in ``fit`` function. :issue:`10933` by :user:`Johannes Hansen `. - - |Efficiency| :class:`cluster.KMeans`, :class:`cluster.MiniBatchKMeans` and :func:`cluster.k_means` passed with ``algorithm='full'`` now enforces row-major ordering, improving runtime. From 088ddeb88e0310edb46ea8c06c10ad814b6713e4 Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Wed, 15 Aug 2018 14:44:43 +1000 Subject: [PATCH 137/138] DOC clean what's new merge mess more --- doc/whats_new/v0.20.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/whats_new/v0.20.rst b/doc/whats_new/v0.20.rst index 6292080f0d001..c9dc230af2afb 100644 --- a/doc/whats_new/v0.20.rst +++ b/doc/whats_new/v0.20.rst @@ -203,8 +203,6 @@ Support for Python 3.3 has been officially dropped. data points could be generated. :issue:`10037` by :user:`Christian Braune `. -.. rubric:: :mod:`sklearn.decomposition`: - :mod:`sklearn.decomposition` ............................ From fd9fba07a3350eec4c6c2f554b4502a7f878320e Mon Sep 17 00:00:00 2001 From: Joel Nothman Date: Wed, 15 Aug 2018 15:46:30 +1000 Subject: [PATCH 138/138] Fix urlopen has no __exit__ in Python 2 --- sklearn/datasets/openml.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sklearn/datasets/openml.py b/sklearn/datasets/openml.py index 9eb57471e7cea..d7693ffd6fea9 100644 --- a/sklearn/datasets/openml.py +++ b/sklearn/datasets/openml.py @@ -62,8 +62,9 @@ def _open_openml_url(openml_path, data_home): try: with gzip.GzipFile(local_path, 'wb') as fdst: - with urlopen(_OPENML_PREFIX + openml_path) as fsrc: - shutil.copyfileobj(fsrc, fdst) + fsrc = urlopen(_OPENML_PREFIX + openml_path) + shutil.copyfileobj(fsrc, fdst) + fsrc.close() except Exception: os.unlink(local_path) raise