GPy/setup.py

156 lines
6.2 KiB
Python
Raw Normal View History

2012-11-29 16:24:48 +00:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
2015-10-01 16:27:16 +01:00
#===============================================================================
# Copyright (c) 2012 - 2014, GPy authors (see AUTHORS.txt).
# Copyright (c) 2014, James Hensman, Max Zwiessele
# Copyright (c) 2015, Max Zwiessele
#
# All rights reserved.
#
2015-10-01 16:27:16 +01:00
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
2015-10-01 16:27:16 +01:00
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
2015-10-01 16:27:16 +01:00
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# * Neither the name of GPy nor the names of its
2015-10-01 16:27:16 +01:00
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
2015-10-01 16:27:16 +01:00
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#===============================================================================
2015-09-10 08:35:09 +01:00
from __future__ import print_function
import os
import sys
2015-04-27 14:21:46 +01:00
from setuptools import setup, Extension
import codecs
2015-09-10 08:35:09 +01:00
try:
ModuleNotFoundError
except NameError:
ModuleNotFoundError = ImportError
2012-11-29 16:24:48 +00:00
def read(fname):
2015-10-12 14:28:23 +01:00
with codecs.open(fname, 'r', 'latin') as f:
2015-10-12 08:55:55 +01:00
return f.read()
def read_to_rst(fname):
2015-09-09 14:33:08 +01:00
try:
import pypandoc
2015-10-12 10:05:59 +01:00
rstname = "{}.{}".format(os.path.splitext(fname)[0], 'rst')
2015-11-07 11:24:17 +00:00
pypandoc.convert(read(fname), 'rst', format='md', outputfile=rstname)
with open(rstname, 'r') as f:
rststr = f.read()
return rststr
2015-10-12 17:08:05 +01:00
#return read(rstname)
2015-10-07 13:17:01 +01:00
except ImportError:
2015-09-09 14:33:08 +01:00
return read(fname)
2016-04-11 08:51:21 +01:00
desc = """
2016-07-29 11:07:50 +01:00
Please refer to the github homepage for detailed instructions on installation and usage.
2016-04-11 08:51:21 +01:00
"""
version_dummy = {}
exec(read('GPy/__version__.py'), version_dummy)
__version__ = version_dummy['__version__']
del version_dummy
2015-09-09 09:28:42 +01:00
2015-09-10 08:35:09 +01:00
#Mac OS X Clang doesn't support OpenMP at the current time.
2015-09-07 13:38:11 +01:00
#This detects if we are building on a Mac
def ismac():
2015-09-10 15:06:15 +01:00
return sys.platform[:6] == 'darwin'
2015-09-07 13:38:11 +01:00
if ismac():
compile_flags = [ '-O3', ]
2015-09-08 21:38:48 +01:00
link_args = []
2015-09-07 13:38:11 +01:00
else:
2015-10-14 10:28:23 +01:00
compile_flags = [ '-fopenmp', '-O3']
link_args = ['-lgomp' ]
2015-04-27 14:21:46 +01:00
try:
# So that we don't need numpy installed to determine it's a dependency.
import numpy as np
ext_mods = [Extension(name='GPy.kern.src.stationary_cython',
2018-10-18 17:54:21 +01:00
sources=['GPy/kern/src/stationary_cython.pyx',
'GPy/kern/src/stationary_utils.c'],
include_dirs=[np.get_include(), '.'],
extra_compile_args=compile_flags,
extra_link_args=link_args),
Extension(name='GPy.util.choleskies_cython',
2018-10-18 17:54:21 +01:00
sources=['GPy/util/choleskies_cython.pyx'],
include_dirs=[np.get_include(), '.'],
extra_link_args=link_args,
extra_compile_args=compile_flags),
Extension(name='GPy.util.linalg_cython',
2018-10-18 17:54:21 +01:00
sources=['GPy/util/linalg_cython.pyx'],
include_dirs=[np.get_include(), '.'],
extra_compile_args=compile_flags,
extra_link_args=link_args),
Extension(name='GPy.kern.src.coregionalize_cython',
2018-10-18 17:54:21 +01:00
sources=['GPy/kern/src/coregionalize_cython.pyx'],
include_dirs=[np.get_include(), '.'],
extra_compile_args=compile_flags,
extra_link_args=link_args),
Extension(name='GPy.models.state_space_cython',
2018-10-18 17:54:21 +01:00
sources=['GPy/models/state_space_cython.pyx'],
include_dirs=[np.get_include(), '.'],
extra_compile_args=compile_flags,
extra_link_args=link_args)]
except ModuleNotFoundError:
ext_mods = []
setup(
2015-09-09 08:58:01 +01:00
version = __version__,
2015-10-12 10:09:41 +01:00
author = read_to_rst('AUTHORS.txt'),
2015-04-27 14:21:46 +01:00
ext_modules = ext_mods,
2012-11-29 16:24:48 +00:00
)
2015-10-10 13:32:32 +01:00
# Check config files and settings:
local_file = os.path.abspath(os.path.join(os.path.dirname(__file__), 'GPy', 'installation.cfg'))
home = os.getenv('HOME') or os.getenv('USERPROFILE')
user_file = os.path.join(home,'.config', 'GPy', 'user.cfg')
print("")
try:
if not os.path.exists(user_file):
# Does an old config exist?
old_user_file = os.path.join(home,'.gpy_user.cfg')
if os.path.exists(old_user_file):
# Move it to new location:
print("GPy: Found old config file, moving to new location {}".format(user_file))
if not os.path.exists(os.path.dirname(user_file)):
os.makedirs(os.path.dirname(user_file))
os.rename(old_user_file, user_file)
else:
# No config file exists, save informative stub to user config folder:
print("GPy: Saving user configuration file to {}".format(user_file))
if not os.path.exists(os.path.dirname(user_file)):
os.makedirs(os.path.dirname(user_file))
with open(user_file, 'w') as f:
with open(local_file, 'r') as l:
tmp = l.read()
f.write(tmp)
2015-10-10 13:32:32 +01:00
else:
print("GPy: User configuration file at location {}".format(user_file))
except:
2016-04-09 20:55:43 +01:00
print("GPy: Could not write user configuration file {}".format(user_file))