content: #! /usr/bin/env python
  #
  # Copyright (C) 2007-2009 Cournapeau David <cournape@gmail.com>
  #               2010 Fabian Pedregosa <fabian.pedregosa@inria.fr>
  # License: 3-clause BSD
  
  descr = """A set of python modules for machine learning and data mining"""
  
  import sys
  import os
  import shutil
  from distutils.command.clean import clean as Clean
  
  
  if sys.version_info[0] < 3:
      import __builtin__ as builtins
  else:
      import builtins
  
  # This is a bit (!) hackish: we are setting a global variable so that the main
  # sklearn __init__ can detect if it is being loaded by the setup routine, to
  # avoid attempting to load components that aren't built yet:
  # the numpy distutils extensions that are used by scikit-learn to recursively
  # build the compiled extensions in sub-packages is based on the Python import
  # machinery.
  builtins.__SKLEARN_SETUP__ = True
  
  DISTNAME = 'scikit-learn'
  DESCRIPTION = 'A set of python modules for machine learning and data mining'
  with open('README.rst') as f:
      LONG_DESCRIPTION = f.read()
  MAINTAINER = 'Andreas Mueller'
  MAINTAINER_EMAIL = 'amueller@ais.uni-bonn.de'
  URL = 'http://scikit-learn.org'
  LICENSE = 'new BSD'
  DOWNLOAD_URL = 'http://sourceforge.net/projects/scikit-learn/files/'
  
  # We can actually import a restricted version of sklearn that
  # does not need the compiled code
  import sklearn
  VERSION = sklearn.__version__
  
  
  # Optional setuptools features
  # We need to import setuptools early, if we want setuptools features,
  # as it monkey-patches the 'setup' function
  # For some commands, use setuptools
  SETUPTOOLS_COMMANDS = set([
      'develop', 'release', 'bdist_egg', 'bdist_rpm',
      'bdist_wininst', 'install_egg_info', 'build_sphinx',
      'egg_info', 'easy_install', 'upload', 'bdist_wheel',
      '--single-version-externally-managed',
  ])
  if SETUPTOOLS_COMMANDS.intersection(sys.argv):
      import setuptools
      extra_setuptools_args = dict(
          zip_safe=False,  # the package can run out of an .egg file
          include_package_data=True,
      )
  else:
      extra_setuptools_args = dict()
  
  
  # Custom clean command to remove build artifacts
  
  class CleanCommand(Clean):
      description = "Remove build artifacts from the source tree"
  
      def run(self):
          Clean.run(self)
          if os.path.exists('build'):
              shutil.rmtree('build')
          for dirpath, dirnames, filenames in os.walk('sklearn'):
              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))
  
  cmdclass = {'clean': CleanCommand}
  
  
  # Optional wheelhouse-uploader features
  # To automate release of binary packages for scikit-learn we need a tool
  # to download the packages generated by travis and appveyor workers (with
  # version number matching the current release) and upload them all at once
  # to PyPI at release time.
  # The URL of the artifact repositories are configured in the setup.cfg file.
  
  WHEELHOUSE_UPLOADER_COMMANDS = set(['fetch_artifacts', 'upload_all'])
  if WHEELHOUSE_UPLOADER_COMMANDS.intersection(sys.argv):
      import wheelhouse_uploader.cmd
      cmdclass.update(vars(wheelhouse_uploader.cmd))
  
  
  def configuration(parent_package='', top_path=None):
      if os.path.exists('MANIFEST'):
          os.remove('MANIFEST')
  
      from numpy.distutils.misc_util import Configuration
      config = Configuration(None, parent_package, top_path)
  
      # Avoid non-useful msg:
      # "Ignoring attempt to set 'name' (from ... "
      config.set_options(ignore_setup_xxx_py=True,
                         assume_default_configuration=True,
                         delegate_options_to_subpackages=True,
                         quiet=True)
  
      config.add_subpackage('sklearn')
  
      return config
  
  def is_scipy_installed():
      try:
          import scipy
      except ImportError:
          return False
      return True
  
  def is_numpy_installed():
      try:
          import numpy
      except ImportError:
          return False
      return True
  
  def setup_package():
      metadata = dict(name=DISTNAME,
                      maintainer=MAINTAINER,
                      maintainer_email=MAINTAINER_EMAIL,
                      description=DESCRIPTION,
                      license=LICENSE,
                      url=URL,
                      version=VERSION,
                      download_url=DOWNLOAD_URL,
                      long_description=LONG_DESCRIPTION,
                      classifiers=['Intended Audience :: Science/Research',
                                   'Intended Audience :: Developers',
                                   'License :: OSI Approved',
                                   'Programming Language :: C',
                                   'Programming Language :: Python',
                                   'Topic :: Software Development',
                                   'Topic :: Scientific/Engineering',
                                   'Operating System :: Microsoft :: Windows',
                                   'Operating System :: POSIX',
                                   'Operating System :: Unix',
                                   'Operating System :: MacOS',
                                   'Programming Language :: Python :: 2',
                                   'Programming Language :: Python :: 2.6',
                                   'Programming Language :: Python :: 2.7',
                                   'Programming Language :: Python :: 3',
                                   'Programming Language :: Python :: 3.3',
                                   'Programming Language :: Python :: 3.4',
                                   ],
                      cmdclass=cmdclass,
                      **extra_setuptools_args)
  
      if (len(sys.argv) >= 2
              and ('--help' in sys.argv[1:] or sys.argv[1]
                   in ('--help-commands', 'egg_info', '--version', 'clean'))):
  
          # For these actions, NumPy is not required.
          #
          # They are required to succeed without Numpy for example when
          # pip is used to install Scikit-learn when Numpy is not yet present in
          # the system.
          try:
              from setuptools import setup
          except ImportError:
              from distutils.core import setup
  
          metadata['version'] = VERSION
      else:
          if is_numpy_installed() is False:
              raise ImportError("Numerical Python (NumPy) is not installed.\n"
                               "scikit-learn requires NumPy.\n"
                               "Installation instructions are available on scikit-learn website: "
                               "http://scikit-learn.org/stable/install.html\n")
          if is_scipy_installed() is False:
              raise ImportError("Scientific Python (SciPy) is not installed.\n"
                               "scikit-learn requires SciPy.\n"
                               "Installation instructions are available on scikit-learn website: "
                               "http://scikit-learn.org/stable/install.html\n")
          from numpy.distutils.core import setup
  
          metadata['configuration'] = configuration
  
      setup(**metadata)
  
  
  if __name__ == "__main__":
      setup_package()
  