From 140a9cd7c31c0343b8647bb8d73bdd0b88f43dff Mon Sep 17 00:00:00 2001 From: Baptiste Bauvin <baptiste.bauvin@lis-lab.fr> Date: Wed, 29 Apr 2020 11:13:02 -0400 Subject: [PATCH] Removed --- .gitignore | 3 - examples/data/doc_summit.hdf5 | Bin 111628 -> 0 bytes multiview_platform/datasets/__init__.py | 2 - multiview_platform/datasets/base.py | 204 ------------------ multiview_platform/datasets/data_sample.py | 161 -------------- .../datasets/get_dataset_path.py | 25 --- multiview_platform/declare_classifier.py | 53 ----- multiview_platform/versions.py | 96 --------- 8 files changed, 544 deletions(-) delete mode 100644 examples/data/doc_summit.hdf5 delete mode 100644 multiview_platform/datasets/__init__.py delete mode 100644 multiview_platform/datasets/base.py delete mode 100644 multiview_platform/datasets/data_sample.py delete mode 100644 multiview_platform/datasets/get_dataset_path.py delete mode 100644 multiview_platform/declare_classifier.py delete mode 100644 multiview_platform/versions.py diff --git a/.gitignore b/.gitignore index 321544b7..8f15990a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,5 @@ TODO *.pyc -.idea/** -ipynb/.ipynb_checkpoints/** -docs/source/monomulti/.ipynb_checkpoints/** results/* data/* Data/* diff --git a/examples/data/doc_summit.hdf5 b/examples/data/doc_summit.hdf5 deleted file mode 100644 index 68e25ef4604908db4631950088afa7e64acacc7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111628 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 WX=ev&e9&fs8`Tavw0&r_HUj{z*U6s% diff --git a/multiview_platform/datasets/__init__.py b/multiview_platform/datasets/__init__.py deleted file mode 100644 index 8cfb3abd..00000000 --- a/multiview_platform/datasets/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from multiview_platform.datasets.base import * -from multiview_platform.datasets.data_sample import DataSample, Metriclearn_array diff --git a/multiview_platform/datasets/base.py b/multiview_platform/datasets/base.py deleted file mode 100644 index e559b866..00000000 --- a/multiview_platform/datasets/base.py +++ /dev/null @@ -1,204 +0,0 @@ -from __future__ import print_function -import pickle -import numpy as np -import numpy.ma as ma -from multiview_platform.datasets.data_sample import DataSample -from six.moves import cPickle as pickle #for performance -import numpy as np - - -def save_dict(di_, filename_): - with open(filename_, 'wb') as f: - pickle.dump(di_, f) - -def load_dict(filename_): - with open(filename_, 'rb') as f: - ret_di = pickle.load(f) - return ret_di - - -def load_data(address, output='array', pickle=False): - if output.startswith(('array')): - views = np.empty((len(address)), dtype=object) - else: - views = {} - i = 0 - nb_samples, nb_features = _determine_dimensions(address) - for addr in address: - data = _load_view_sample(addr, nb_samples , nb_features[i], pickle=pickle) - views[i] = data - i += 1 - return DataSample(data=views) - -def _determine_dimensions(address): - nb_features = [] - nb_samples = 0 - nb_sample_max = -1 - for adr in address: - try: - f = open(adr, "r") - line = f.readline() - nb_samples += 1 - while line : - line = f.readline() - l = line.split() - nb_samples += 1 - nb_features.append(len(l)) - line = f.readline() - if nb_sample_max < nb_samples: - nb_sample_max = nb_samples - f.close() - except IOError: - raise IOError("file adr can't be open") - return nb_sample_max, nb_features - -def _load_view_sample(adr, nb_samples, nb_features, pickle=False): - """Load a sample from file and returns a dictionary - (word,count) - - - Input: - - :param lrows: number or list of rows, - a list of strings if partial=True; - otherwise, based on pref if version="classic" or - "prefix", fact otherwise - :type lrows: int or list of int - :param lcolumns: number or list of columns - a list of strings if partial=True ; - otherwise, based on suff if version="classic" or "suffix", - fact otherwise - :type lcolumns: int or list of int - :param string version: (default = "classic") version name - :param boolean partial: (default value = False) build of partial - if True partial dictionaries are loaded based - on nrows and lcolumns - - - Output: - - :returns: nbL , nbEx , dsample , dpref , dsuff , dfact - :rtype: int , int , dict , dict , dict , dict - - - :Example: - - Let's say you are interested in the samples 10, 25, and 50, and want to - know their class name. - - >>> from metriclearning.datasets.base import load_data_sample - >>> from metriclearning.tests.datasets.get_dataset_path import get_dataset_path - >>> train_file = '3.pautomac_light.train' # '4.spice.train' - >>> data = load_data_sample(adr=get_dataset_path(train_file)) - >>> data.nbL - 4 - >>> data.nbEx - 5000 - >>> data.data - Splearn_array([[ 3., 0., 3., ..., -1., -1., -1.], - [ 3., 3., -1., ..., -1., -1., -1.], - [ 3., 2., 0., ..., -1., -1., -1.], - ..., - [ 3., 1., 3., ..., -1., -1., -1.], - [ 3., 0., 3., ..., -1., -1., -1.], - [ 3., 3., 1., ..., -1., -1., -1.]]) - - """ - #nb_sample, max_length = _read_dimension(adr=adr) - f = open(adr, "r") - line = f.readline() - l = line.split() - nbEx = int(l[0]) - nbL = int(l[1]) - line = f.readline() - data1 = np.zeros((nb_samples, nb_features), dtype=np.float) - data1 += np.NAN - datatrue = np.ones((nb_samples, nb_features), dtype=np.bool) - i = 0 - while line: - l = line.split() - # w = () if int(l[0]) == 0 else tuple([int(x) for x in l[1:]]) - # dsample[w] = dsample[w] + 1 if w in dsample else 1 - # traitement du mot vide pour les préfixes, suffixes et facteurs - w = [float(x) for x in l[0:]] - data1[i, :len(w)] = w - line = f.readline() - i += 1 - if i > nbEx: - raise IndexError("dimension is not well defined") - masint= np.isnan(data1) - # masint = np.logical_not(masint) - madata1 = ma.MaskedArray(data1, masint) - f.close() - - if pickle: - _create_pickle_files(adr=adr, dsample=madata1) - return madata1 - -# def _read_dimension(adr): -# f = open(adr, "r") -# line = f.readline() -# l = line.split() -# nbEx = int(l[0]) -# nbL = int(l[1]) -# line = f.readline() -# max_length = 0 -# nb_sample = 0 -# while line: -# l = line.split() -# nb_sample += 1 -# length = int(l[0]) -# if max_length < length: -# max_length = length -# line = f.readline() -# f.close() -# if nb_sample != nbEx: -# raise ValueError("check imput file, metadata " + str(nbEx) + -# "do not match number of samples " + str(nb_sample)) -# return nb_sample , max_length - -# def _load_file_1lecture(adr, pickle=False): -# dsample = {} # dictionary (word,count) -# f = open(adr, "r") -# line = f.readline() -# l = line.split() -# nbEx = int(l[0]) -# nbL = int(l[1]) -# line = f.readline() -# data1 = np.zeros((0,0)) -# length = 0 -# while line: -# l = line.split() -# # w = () if int(l[0]) == 0 else tuple([int(x) for x in l[1:]]) -# # dsample[w] = dsample[w] + 1 if w in dsample else 1 -# # traitement du mot vide pour les préfixes, suffixes et facteurs -# w = [] if int(l[0]) == 0 else [int(x) for x in l[1:]] -# word = np.array(w, ndmin=2, dtype=np.uint32) -# diff = abs(int(l[0]) - length) -# if len(w) > length and not np.array_equal(data1, np.zeros((0,0))): -# data1 = _add_empty(data1, diff) -# elif word.shape[0] < length and not np.array_equal(data1, np.zeros((0,0))): -# word = _add_empty(word, diff) -# -# if np.array_equal(data1, np.zeros((0,0))): -# data1 = word -# else: -# data1 = np.concatenate((data1, word), axis=0) -# length = data1.shape[1] -# line = f.readline() -# -# f.close() -# if pickle: -# _create_pickle_files(adr=adr, dsample=dsample) -# return nbL, nbEx, data1 - - -# def _add_empty(data, diff): -# empty = np.zeros((data.shape[0], diff)) -# empty += -1 -# data = np.concatenate((data, empty), axis=1) -# return data - - -def _create_pickle_files(self, adr, dsample): - f = open(adr + ".sample.pkl", "wb") - pickle.dump(dsample, f) - f.close() diff --git a/multiview_platform/datasets/data_sample.py b/multiview_platform/datasets/data_sample.py deleted file mode 100644 index 833528da..00000000 --- a/multiview_platform/datasets/data_sample.py +++ /dev/null @@ -1,161 +0,0 @@ -# -*- coding: utf-8 -*- - -"""This module contains the DataSample class and Splearn_array class -The DataSample class encapsulates a sample 's components -nbL and nbEx numbers, -Splearn_array class inherit from numpy ndarray and contains a 2d data ndarray -with the shape - -==== ==== ==== ==== ==== -x x x x -1 -x x x x x -x x -1 -1 -1 -x -1 -1 -1 -1 --1 -1 -1 -1 -1 -==== ==== ==== ==== ==== - -where -1 a indicates a empty cell, -the number nbL and nbEx and , the fourth dictionaries for sample, -prefix, suffix and factor where they are computed -""" -import numpy as np -import numpy.ma as ma - - -class MultiView_array(ma.MaskedArray): - """Splearn_array inherit from numpy ndarray - - :Example: - - >>> from multiview_platform.datasets.base import load_data - >>> from multiview_platform.datasets.get_dataset_path import get_dataset_path - >>> train_file = '' # '4.spice.train' - >>> data = load_data(adr=get_dataset_path(train_file)) - >>> print(data.__class__) - >>> data.data - - """ - def __new__(cls, data): - shapes_int = [] - index = 0 - new_data = data - shape_ext = len(data) - thekeys = None - if isinstance(data, dict): - shape_ext = len(data) - for key, dat_values in data.items(): - new_data = cls._populate_new_data(index, dat_values, new_data) - shapes_int.append(dat_values.shape[0]) - index += 1 - thekeys = data.keys() - - if isinstance(data, np.ndarray): - shape_ext = data.shape[0] - for dat_values in data: - shapes_int.append(dat_values.shape[0]) - new_data = cls._populate_new_data(index, dat_values, new_data) - index += 1 - # obj = ma.MaskedArray.__new(new_data) # new_data.view() a.MaskedArray(new_data, mask=new_data.mask).view(cls) - # bj = super(Metriclearn_array, cls).__new__(cls, new_data.data, new_data.mask) - obj = ma.masked_array(new_data.data, new_data.mask).view(cls) - obj.shapes_int = shapes_int - obj.shape_ext = shape_ext - obj.keys = thekeys - return obj - - - @staticmethod - def _populate_new_data(index, dat_values, new_data): - if index == 0: - if isinstance(dat_values, ma.MaskedArray): - new_data = dat_values - else: - new_data = dat_values.view(ma.MaskedArray) # ma.masked_array(dat_values, mask=ma.nomask) dat_values.view(ma.MaskedArray) #( - new_data.mask = ma.nomask - else: - if isinstance(dat_values, ma.MaskedArray): - new_data = ma.hstack((new_data, dat_values)) - else: - new_data = ma.hstack((new_data, dat_values.view(ma.MaskedArray) ) ) # ma.masked_array(dat_values, mask=ma.nomask - return new_data - - def __array_finalize__(self, obj): - if obj is None: return - super(MultiView_array, self).__array_finalize__(obj) - self.shapes_int = getattr(obj, 'shapes_int', None) - self.shape_ext = getattr(obj, 'shape_ext', None) - self.keys = getattr(obj, 'keys', None) - - def getCol(self, view, col): - start = np.sum(np.asarray(self.shapes_int[0: view])) - return self.data[start+col, :] - - def getView(self, view): - start = np.sum(np.asarray(self.shapes_int[0: view])) - stop = start + self.shapes_int[view] - return self.data[start:stop, :] - - def getRaw(self, view, raw): - start = np.sum(np.asarray(self.shapes_int[0: view])) - stop = np.sum(np.asarray(self.shapes_int[0: view+1])) - return self.data[start:stop, raw] - -class DataSample(dict): - """ A DataSample instance - - :Example: - - >>> from multiview_platform.datasets.base import load_data - >>> from multiview_platform.datasets.get_dataset_path import get_dataset_path - >>> train_file = '' # '4.spice.train' - >>> data = load_data_sample(adr=get_dataset_path(train_file)) - >>> print - (data.__class__) - - >>> data.data - - - Input: - - :param string adr: adresse and name of the loaden file - :param string type: (default value = 'SPiCe') indicate - the structure of the file - :param lrows: number or list of rows, - a list of strings if partial=True; - otherwise, based on self.pref if version="classic" or - "prefix", self.fact otherwise - :type lrows: int or list of int - :param lcolumns: number or list of columns - a list of strings if partial=True ; - otherwise, based on self.suff if version="classic" or "suffix", - self.fact otherwise - :type lcolumns: int or list of int - :param string version: (default = "classic") version name - :param boolean partial: (default value = False) build of partial - - """ - - def __init__(self, data=None, **kwargs): - - # The dictionary that contains the sample - super(DataSample, self).__init__(kwargs) - self._data = None # Metriclearn_array(np.zeros((0,0))) - if data is not None: - self._data = MultiView_array(data) - - - @property - def data(self): - """Metriclearn_array""" - - return self._data - - @data.setter - def data(self, data): - if isinstance(data, (MultiView_array, np.ndarray, ma.MaskedArray, np.generic)): - self._data = data - else: - raise TypeError("sample should be a MultiView_array.") - - - - diff --git a/multiview_platform/datasets/get_dataset_path.py b/multiview_platform/datasets/get_dataset_path.py deleted file mode 100644 index f533aa84..00000000 --- a/multiview_platform/datasets/get_dataset_path.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- - - -from __future__ import print_function, division - -import os - - -def get_dataset_path(filename): - """Return the absolute path of a reference dataset for tests - - - Input parameter: - - :param str filename: File name of the file containing reference data - for tests (which must be in ``skgilearn/tests/datasets/``) - - - Output parameters: - - :returns: The absolute path where the file with name **filename** is stored - :rtype: str - - """ - - datasets_path = os.path.dirname(os.path.abspath(__file__)) - return os.path.join(datasets_path, filename) diff --git a/multiview_platform/declare_classifier.py b/multiview_platform/declare_classifier.py deleted file mode 100644 index 9d83f06a..00000000 --- a/multiview_platform/declare_classifier.py +++ /dev/null @@ -1,53 +0,0 @@ -import os -import importlib -import inspect - - -class ClassierMakerMultiViewPlatform(): - _benchmark = {"monoview": - {"path_classifier": 'multiview_platform/mono_multi_view_classifier/monoview_classifiers'}, - "multiview": - {"path_classifier_multi": 'multiview_platform/mono_multi_view_classifier/multiview_classifier'}} - - - def __init__(self, classifier_names, classifier_modules=None, classifier_files=None, mod='monoview'): - if classifier_files is None and classifier_names.size != classifier_modules.size: - raise ValueError("attr classifier_names and classifier_modules should have same size") - if classifier_modules is None and classifier_names.size != classifier_files.size: - raise ValueError("attr classifier_names and classifier_files should have same size") - - if classifier_files is None: - for classifier, module in zip(classifier_names, classifier_modules): - my_instance, my_module = self._check_classifier_install - - self._create_class(my_instance, my_module) - - - def _check_classifier_install(self, classifier, module): - try: - my_module = importlib.import_module(module) - except Exception: - raise("the module %d can't be imported" % module) - try: - my_instance = getattr(my_module, classifier) - except AttributeError: - raise AttributeError("The class %d is not in %d" % classifier %module) - return my_instance, my_module - - def _create_class(self, classifier, module): - if mod.startswith('monoview'): - directory = self._benchmark[mod]["path_classifier"] - - - def _get_module_name(self, mymodule): - for name in dir(mymodule): - att = getattr(mymodule, name) - try: - getattr(att, "__module__") - if att.__module__.startswith(mymodule.__name__): - if inspect.isclass(att): - if att == name: - return name - except Exception: - return None - return None \ No newline at end of file diff --git a/multiview_platform/versions.py b/multiview_platform/versions.py deleted file mode 100644 index b60d9854..00000000 --- a/multiview_platform/versions.py +++ /dev/null @@ -1,96 +0,0 @@ -# Author-Info -__author__ = "Baptiste Bauvin" -__status__ = "Prototype" # Production, Development, Prototype - - -def test_versions(): - """Used to test if all prerequisites are installed""" - is_up_to_date = True - to_install = [] - - # try: - # import sys - # except ImportError: - # raise - # - # try: - # import cvxopt - # except ImportError: - # is_up_to_date = False - # to_install.append("cvxopt") - # - # try: - # import pyscm - # except ImportError: - # is_up_to_date = False - # to_install.append("pyscm") - # - # try: - # import numpy - # except ImportError: - # is_up_to_date = False - # to_install.append("numpy") - # - # try: - # import scipy - # except ImportError: - # is_up_to_date = False - # to_install.append("scipy") - # - # try: - # import matplotlib - # except ImportError: - # is_up_to_date = False - # to_install.append("matplotlib") - # - # try: - # import sklearn - # except ImportError: - # is_up_to_date = False - # to_install.append("sklearn") - # - # try: - # import logging - # except ImportError: - # is_up_to_date = False - # to_install.append("logging") - # - # try: - # import joblib - # except ImportError: - # is_up_to_date = False - # to_install.append("joblib") - # - # try: - # import argparse - # except ImportError: - # is_up_to_date = False - # to_install.append("argparse") - # - # try: - # import h5py # - # except ImportError: - # is_up_to_date = False - # to_install.append("h5py") - # - # # try: - # # import graphviz # - # # except ImportError: - # # is_up_to_date = False - # # to_install.append("graphviz") - # - # try: - # import pickle # - # except ImportError: - # is_up_to_date = False - # to_install.append("pickle") - # - # if not is_up_to_date: - # print( - # "You can't run at the moment, please install the following modules : \n" + "\n".join( - # to_install)) - # quit() - - -if __name__ == "__main__": - test_versions() -- GitLab