-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathsetup.py
130 lines (107 loc) · 4.04 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
'''Setup script for GridCells.'''
from __future__ import absolute_import, print_function, division
from os.path import join
try:
from setuptools import setup, Extension
except ImportError:
from distutils.core import setup, Extension
all_packages = [
'gridcells',
'gridcells.analysis',
'gridcells.core',
'gridcells.plotting',
]
default_swig_opts = [
'-builtin',
'-Wall',
'-O',
'-ignoremissing',
'-c++',
'-Iexternal/armanpy/include',
'-Isrc/include'
]
ARMANPY_INCLUDE_DIR = 'external/armanpy/include'
ARMANPY_DEPS = [
join(ARMANPY_INCLUDE_DIR, 'armanpy.hpp'),
join(ARMANPY_INCLUDE_DIR, 'armanpy.i'),
join(ARMANPY_INCLUDE_DIR, 'armanpy_1d.i'),
join(ARMANPY_INCLUDE_DIR, 'armanpy_2d.i'),
join(ARMANPY_INCLUDE_DIR, 'armanpy_3d.i'),
join(ARMANPY_INCLUDE_DIR, 'numpy.i'),
]
class DelayedExtension(Extension, object):
"""
A distutils Extension subclass where some of its members
may have delayed computation until reaching the build phase.
This is so we can, for example, get the Numpy include dirs
after pip has installed Numpy for us if it wasn't already
on the system.
This class has been adapted from the matplotlib package.
"""
def __init__(self, *args, **kwargs):
super(DelayedExtension, self).__init__(*args, **kwargs)
self._hooks = {"include_dirs": self.get_include_dirs}
@staticmethod
def get_include_dirs():
import numpy
return [
'src/include',
'external/armanpy/include',
'external/armadillo/include',
numpy.get_include()
]
class DelayedMember(property):
def __init__(self, name):
self._name = name
def __get__(self, obj, objtype=None):
result = getattr(obj, '_' + self._name, [])
if self._name in obj._hooks:
result = obj._hooks[self._name]() + result
return result
def __set__(self, obj, value):
setattr(obj, '_' + self._name, value)
include_dirs = DelayedMember('include_dirs')
field_ext = DelayedExtension('gridcells.analysis._fields',
['src/fields.cpp', 'src/fields.i'],
depends=['src/fields.cpp',
'src/include/fields.hpp',
'src/fields.i'] + ARMANPY_DEPS,
swig_opts=default_swig_opts)
common_ext = DelayedExtension('gridcells.core._common',
['src/common.cpp', 'src/common.i'],
depends=['src/common.cpp',
'src/include/common.hpp',
'src/common.i'] + ARMANPY_DEPS,
swig_opts=default_swig_opts)
spikes_ext = DelayedExtension('gridcells.analysis._spikes',
['src/spikes.cpp', 'src/spikes.i'],
depends=['src/spikes.cpp',
'src/include/spikes.hpp',
'src/spikes.i'] + ARMANPY_DEPS,
swig_opts=default_swig_opts)
signal_ext = DelayedExtension('gridcells.analysis._signal',
['src/signal.cpp', 'src/signal.i'],
depends=['src/signal.cpp',
'src/include/signal.hpp',
'src/signal.i'] + ARMANPY_DEPS,
swig_opts=default_swig_opts)
all_extensions = [
field_ext,
common_ext,
spikes_ext,
signal_ext
]
setup(
name='gridcells',
version='0.1.3',
description='Package for grid cell analysis and simulation.',
author='Lukas Solanka',
author_email='[email protected]',
url='https://github.com/lsolanka/gridcells',
license='GPL',
packages=all_packages,
ext_modules=all_extensions,
install_requires=['numpy>=1.8.0',
'scipy>=0.13.3',
'enum34>=1.0.4']
)