Skip to content
Snippets Groups Projects
setup.py 6.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • Dominique Benielli's avatar
    Dominique Benielli committed
    # -*- coding: utf-8 -*-
    # ######### COPYRIGHT #########
    #
    # Copyright(c) 2020
    # -----------------
    #
    # * Université d'Aix Marseille (AMU) -
    # * Centre National de la Recherche Scientifique (CNRS) -
    # * Université de Toulon (UTLN).
    # * Copyright © 2019-2020 AMU, CNRS, UTLN
    #
    # Contributors:
    # ------------
    #
    # * Sokol Koço <sokol.koco_AT_lis-lab.fr>
    # * Cécile Capponi <cecile.capponi_AT_univ-amu.fr>
    # * Florent Jaillet <florent.jaillet_AT_math.cnrs.fr>
    # * Dominique Benielli <dominique.benielli_AT_univ-amu.fr>
    # * Riikka Huusari <rikka.huusari_AT_univ-amu.fr>
    # * Baptiste Bauvin <baptiste.bauvin_AT_univ-amu.fr>
    # * Hachem Kadri <hachem.kadri_AT_lis-lab.fr>
    #
    # Description:
    # -----------
    #
    # The multimodal package implement classifiers multiview, 
    
    # MumboClassifier class, MuComboClassifier class, MVML class, MKL class.
    
    Dominique Benielli's avatar
    Dominique Benielli committed
    # compatible with sklearn
    #
    # Version:
    # -------
    #
    # * multimodal version = 0.0.dev0
    #
    # Licence:
    # -------
    #
    # License: New BSD License
    #
    #
    # ######### COPYRIGHT #########
    
    import os, re
    import shutil
    
    Dominique Benielli's avatar
    Dominique Benielli committed
    from setuptools import setup, find_packages
    
    from distutils.command.clean import clean as _clean
    from distutils.dir_util import remove_tree
    from distutils.command.sdist import sdist
    
    Dominique Benielli's avatar
    Dominique Benielli committed
    import multimodal
    
    Dominique Benielli's avatar
    Dominique Benielli committed
    
    
    try:
        import numpy
    except:
        raise 'Cannot build iw without numpy'
        sys.exit()
    
    # --------------------------------------------------------------------
    # Clean target redefinition - force clean everything supprimer de la liste '^core\.*$',
    relist = ['^.*~$', '^#.*#$', '^.*\.aux$', '^.*\.pyc$', '^.*\.o$']
    reclean = []
    USE_COPYRIGHT = True
    try:
        from copyright import writeStamp, eraseStamp
    except ImportError:
        USE_COPYRIGHT = False
    
    ###################
    # Get Multimodal version
    ####################
    def get_version():
        v_text = open('VERSION').read().strip()
        v_text_formted = '{"' + v_text.replace('\n', '","').replace(':', '":"')
        v_text_formted += '"}'
        v_dict = eval(v_text_formted)
        return v_dict["multimodal"]
    
    ########################
    # Set Multimodal __version__
    ########################
    def set_version(multimodal_dir, version):
        filename = os.path.join(multimodal_dir, '__init__.py')
        buf = ""
        for line in open(filename, "rb"):
            if not line.decode("utf8").startswith("__version__ ="):
                buf += line.decode("utf8")
        f = open(filename, "wb")
        f.write(buf.encode("utf8"))
        f.write(('__version__ = "%s"\n' % version).encode("utf8"))
    
    for restring in relist:
        reclean.append(re.compile(restring))
    
    
    def wselect(args, dirname, names):
        for n in names:
            for rev in reclean:
                if (rev.match(n)):
                    os.remove("%s/%s" %(dirname, n))
            break
    
    
    ######################
    # Custom clean command
    ######################
    class clean(_clean):
        def walkAndClean(self):
            os.walk("..", wselect, [])
            pass
    
        def run(self):
            clean.run(self)
            if os.path.exists('build'):
                shutil.rmtree('build')
            for dirpath, dirnames, filenames in os.walk('iw'):
                for filename in filenames:
                    if (filename.endswith('.so') or
                            filename.endswith('.pyd') or
                            filename.endswith('.dll') or
                            filename.endswith('.pyc')):
                        os.unlink(os.path.join(dirpath, filename))
                for dirname in dirnames:
                    if dirname == '__pycache__':
                        shutil.rmtree(os.path.join(dirpath, dirname))
    
    
    ##############################
    # Custom sdist command
    ##############################
    class m_sdist(sdist):
        """ Build source package
    
        WARNING : The stamping must be done on an default utf8 machine !
        """
    
        def run(self):
            if USE_COPYRIGHT:
                writeStamp()
                sdist.run(self)
                # eraseStamp()
            else:
                sdist.run(self)
    
    Dominique Benielli's avatar
    Dominique Benielli committed
    
    def setup_package():
        """Setup function"""
    
        name = 'scikit-multimodallearn'
    
        version = get_version()
        multimodal_dir = 'multimodal'
        set_version(multimodal_dir, version)
    
    Dominique Benielli's avatar
    Dominique Benielli committed
        description = 'A scikit-learn compatible package for multimodal Classifiers'
        here = os.path.abspath(os.path.dirname(__file__))
        with open(os.path.join(here, 'README.rst'), encoding='utf-8') as readme:
            long_description = readme.read()
        group = 'dev'
        url = 'https://gitlab.lis-lab.fr/{}/{}'.format(group, name)
        project_urls = {
            'Documentation': 'http://{}.pages.lis-lab.fr/{}'.format(group, name),
            'Source': url,
            'Tracker': '{}/issues'.format(url)}
    
    Dominique Benielli's avatar
    Dominique Benielli committed
        author = 'Dominique Benielli and Sokol Koço and Florent Jaillet and Riikka Huusari ' \
    
                 'and Baptiste Bauvin and Cécile Capponi and Hachem Kadri'
    
    Dominique Benielli's avatar
    Dominique Benielli committed
        author_email = 'contact.dev@lis-lab.fr'
        license = 'newBSD'
        classifiers = [
            'Development Status :: 5 - Production/Stable',
            'Intended Audience :: Science/Research',
            'License :: OSI Approved :: GNU Lesser General Public License'
            ' v3 or later (LGPLv3+)',
            'Programming Language :: Python :: 3',
            'Programming Language :: Python :: 3.5',
            'Programming Language :: Python :: 3.6',
            'Topic :: Scientific/Engineering',
            'Topic :: Scientific/Engineering :: Artificial Intelligence',
            'Operating System :: Microsoft :: Windows',
            'Operating System :: POSIX :: Linux',
            'Operating System :: MacOS'],
        keywords = ('machine learning, supervised learning, classification, '
                    'ensemble methods, boosting, kernel')
        packages = find_packages(exclude=['*.tests'])
        install_requires = ['scikit-learn>=0.19', 'numpy', 'scipy', 'cvxopt' ]
        python_requires = '>=3.5'
        extras_require = {
            'dev': ['pytest', 'pytest-cov'],
            'doc': ['sphinx', 'numpydoc', 'sphinx_gallery', 'matplotlib']}
        include_package_data = True
    
        setup(name=name,
              version=version,
              description=description,
              long_description=long_description,
              url=url,
              project_urls=project_urls,
              author=author,
              author_email=author_email,
              license=license,
              classifiers=classifiers,
              keywords=keywords,
              packages=packages,
              install_requires=install_requires,
              python_requires=python_requires,
              extras_require=extras_require,
              include_package_data=include_package_data)
    
    
    if __name__ == "__main__":
        setup_package()