forked from scipy/scipy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
.travis.yml
308 lines (296 loc) · 10.1 KB
/
.travis.yml
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
# After changing this file, check it on:
# http://lint.travis-ci.org/
language: python
addons:
apt:
packages: &common_packages
- libatlas-base-dev
- liblapack-dev
- gfortran
- libgmp-dev
- libmpfr-dev
- libsuitesparse-dev
- ccache
- swig
- libmpc-dev
env:
global:
# Wheelhouse for pre-release wheels
- PRE_WHEELS="https://pypi.anaconda.org/scipy-wheels-nightly/simple"
# Using a single thread can actually speed up some computations on Travis
- OPENBLAS_NUM_THREADS=1
- OTHERSPEC=""
matrix:
include:
- python: 3.6
name: "Lint"
env:
- PYFLAKES=1
- PEP8=1
- NUMPYSPEC="--upgrade numpy"
before_install:
- pip install pycodestyle==2.5.0
- pip install pyflakes==2.1.1
script:
# TODO: remove "ignore[import]" filter below when moving to pyflakes==2.1.2 or above
- PYFLAKES_NODOCTEST=1 pyflakes scipy benchmarks/benchmarks 2>&1 | grep -E -v 'unable to detect undefined names|assigned to but never used|imported but unused|redefinition of unused|may be undefined, or defined from star imports|syntax error in type comment .ignore.import.' > test.out; cat test.out; test \! -s test.out
- pycodestyle scipy benchmarks/benchmarks
- |
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
python tools/lint_diff.py --branch $TRAVIS_BRANCH
fi
- tools/unicode-check.py
- python: 3.7
name: "ARM - Test Group 1"
arch: arm64
dist: bionic
env:
- TESTMODE=fast
- COVERAGE=
- USE_WHEEL=1
- PIP_NO_CACHE_DIR=off
- NUMPYSPEC="numpy"
- TEST_GROUP_COUNT=2
- TEST_GROUP=1
- python: 3.7
name: "ARM - Test Group 2"
arch: arm64
dist: bionic
env:
- TESTMODE=fast
- COVERAGE=
- USE_WHEEL=1
- PIP_NO_CACHE_DIR=off
- NUMPYSPEC="numpy"
- TEST_GROUP_COUNT=2
- TEST_GROUP=2
- python: 3.7
name: "Pre-release Dependencies, Source Dist"
env:
- TESTMODE=fast
- COVERAGE=
- NUMPYSPEC="--pre --upgrade --timeout=60 -i $PRE_WHEELS numpy"
- OTHERSPEC="--pre --upgrade --timeout=60"
# Need a test with most recent Python version where we build from an
# sdist (uses pip build isolation), to check that the version we
# specify in pyproject.toml (will be older than --pre --upgrade) works
- USE_SDIST=1
- python: 3.7
name: "Coverage, Full test suite"
env:
- TESTMODE=full
- COVERAGE="--coverage --gcov"
- NUMPYSPEC="numpy==1.18.5"
# Test SciPy with the debug version of Python.
# However travis only specifies regular or development builds of Python
# so we must install python3.6-dbg using apt.
- language: generic
name: "Python 3.7 Debug"
dist: bionic
env:
- USE_DEBUG=python3.7-dbg
- TESTMODE=fast
- NUMPYSPEC="--upgrade numpy"
addons:
apt:
packages:
- *common_packages
- python3.7-dbg
- python3.7-dev
- python: 3.8
name: "Pre-release Deps, 64-bit BLAS"
env:
- TESTMODE=full
- NUMPYSPEC="--pre --upgrade --timeout=60 -i $PRE_WHEELS numpy"
- OTHERSPEC="--pre --upgrade --timeout=60"
- NPY_USE_BLAS_ILP64=1
- python: 3.6
name: "Refguide-check, Latest NumPy"
env:
- TESTMODE=fast
- COVERAGE=
- USE_WHEEL=1
- REFGUIDE_CHECK=1
- NUMPYSPEC="--upgrade numpy"
- ASV_CHECK=1
- python: 3.6
name: "Source Distribution"
env:
- TESTMODE=fast
- COVERAGE=
- NUMPYSPEC="numpy==1.17.4"
- USE_SDIST=1
- python: 3.6
name: "Wheel, Optimised, GCC 4.8"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- *common_packages
- g++-4.8
- gcc-4.8
env:
# GCC 4.8 is used by manylinux1 wheel builds
- CC="gcc-4.8"
- CXX="g++-4.8"
- TESTMODE=fast
- COVERAGE=
- USE_WHEEL=1
- NUMPYSPEC="numpy==1.16.5"
# The following is needed for optimized "-OO" test run but since we use
# pytest-xdist plugin for load scheduling its workers don't pick up the
# flag. This environment variable starts all Py instances in -OO mode.
- PYTHONOPTIMIZE=2
- python: 3.6
name: "Power PC"
os: linux
arch: ppc64le
env:
- TESTMODE=fast
- COVERAGE=
- NUMPYSPEC="--upgrade numpy --no-cache-dir"
cache:
directories:
- $HOME/.ccache
- $HOME/.cache/pip
- $HOME/Library/Caches/pip
before_install:
- echo $TRAVIS_OS_NAME
- |
if [ "$TRAVIS_OS_NAME" == "linux" ]; then
free -m
export PATH=/usr/lib/ccache:$PATH
ccache --zero-stats
fi
- |
if [[ "$NPY_USE_BLAS_ILP64" == "1" ]]; then
target=$(python tools/openblas_support.py)
echo "[openblas64_]" > site.cfg
echo "library_dirs = $target/lib" >> site.cfg
echo "include_dirs = $target/include" >> site.cfg
echo "runtime_library_dirs = $target/lib" >> site.cfg
fi
- export CCACHE_COMPRESS=1
- if [ -n "$CC" ]; then ln -s `which ccache` "/usr/lib/ccache/$CC" || true; fi
- if [ -n "$CXX" ]; then ln -s `which ccache` "/usr/lib/ccache/$CXX" || true; fi
- python --version # just to check
- export NPY_NUM_BUILD_JOBS=2
- uname -a
- df -h
- ulimit -a
- set -e -o pipefail
- mkdir builds
- cd builds
- |
if [ -n "${USE_DEBUG}" ]; then
# Work in our own virtualenv to isolate from travis-ci packages.
virtualenv --python=$USE_DEBUG venv
source venv/bin/activate
fi
- python --version
- python -c 'import sys; print("Python debug build:", hasattr(sys, "gettotalrefcount"))'
- |
travis_retry pip install --upgrade pip setuptools wheel $OTHERSPEC cython pytest pytest-xdist mpmath argparse gmpy2 pybind11
travis_retry pip install --upgrade $NUMPYSPEC
- |
if [ -z "${USE_DEBUG}" -a "${TRAVIS_CPU_ARCH}" == "amd64" -a "${TRAVIS_PYTHON_VERSION}" != "3.8" ]; then
if ! expr "$NUMPYSPEC" : ".*--pre.*" > /dev/null; then
# Install these only when not using Numpy prerelease
travis_retry pip install numba==0.49.1
travis_retry pip install --only-binary=:all: sparse
fi
fi
- |
if [ -n "${TEST_GROUP_COUNT}" ]; then
travis_retry pip install pytest-test-groups
export TEST_GROUP_ARGS="--test-group-count=${TEST_GROUP_COUNT} --test-group=${TEST_GROUP} --test-group-random-seed=1234"
fi
- |
if [ "${TESTMODE}" == "full" ]; then
travis_retry pip install matplotlib scikit-umfpack scikit-sparse
fi
- |
if [ -n "${COVERAGE}" ]; then
travis_retry pip install pytest-cov coverage codecov
fi
- |
if [ "${REFGUIDE_CHECK}" == "1" ]; then
travis_retry pip install matplotlib Sphinx==1.7.2
fi
- |
if [ "${ASV_CHECK}" == "1" ]; then
travis_retry pip install "asv>=0.4.1"
fi
- pip uninstall -y nose
- ccache -s
- cd ..
script:
- python -c 'import numpy as np; print("relaxed strides checking:", np.ones((10,1),order="C").flags.f_contiguous)'
# Make sure that relaxed strides checking is actually in effect; otherwise fail loudly
- if [ "$NPY_RELAXED_STRIDES_CHECKING" == "1" ]; then python -c'import numpy as np; assert np.ones((10,1),order="C").flags.f_contiguous'; fi
# Test that mpmath actually uses gmpy2
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then python -c 'import mpmath.libmp; assert mpmath.libmp.BACKEND == "gmpy"'; fi
- |
if [ "${USE_WHEEL}" == "1" ]; then
# Run setup.py build before pip wheel, to build in current directory
# and make more efficient use of ccache
echo "setup.py build"
python tools/suppress_output.py python setup.py build
echo "pip wheel"
python tools/suppress_output.py pip wheel --no-build-isolation .
pip install --no-cache-dir scipy*.whl
USE_WHEEL_BUILD="--no-build"
elif [ "${USE_SDIST}" == "1" ]; then
echo "setup.py sdist"
python tools/suppress_output.py python setup.py sdist
# Move out of source directory to avoid finding local scipy
cd dist
echo "pip install"
# Note: uses build isolation, which is what pip does with sdists by default
# Note: don't use a fixed build dir (which would help for ccache), because
# --build is partially broken and the workaround in commit b4617dd764
# messes with build isolation.
pip install $PWD/scipy* -v
cd ..
USE_WHEEL_BUILD="--no-build"
fi
- export SCIPY_AVAILABLE_MEM=3G
- python -u runtests.py -g -j2 --build-only $COVERAGE $USE_WHEEL_BUILD
# Only run tests against pull-requests
- |
if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then
python -u runtests.py -g -j2 -m $TESTMODE $COVERAGE $USE_WHEEL_BUILD -- -rfEX --durations=10 $TEST_GROUP_ARGS 2>&1 | tee runtests.log
tools/validate_runtests_log.py $TESTMODE < runtests.log
fi
- |
if [ "${TRAVIS_PULL_REQUEST}" != "false" ] && [ "${REFGUIDE_CHECK}" == "1" ]; then
python runtests.py -g --refguide-check
fi
- |
if [ "${TRAVIS_PULL_REQUEST}" != "false" ] && [ "${ASV_CHECK}" == "1" ]; then
(cd benchmarks && python -masv check -E existing)
fi
# Check dynamic symbol hiding works on Linux
- |
if [ "${TRAVIS_PULL_REQUEST}" != "false" ] && [ "$TRAVIS_OS_NAME" == "linux" ]; then
./tools/check_pyext_symbol_hiding.sh build
fi
after_script:
- ccache -s
# Upload coverage information
- |
if [ "${TRAVIS_PULL_REQUEST}" != "false" ] && [ -n "${COVERAGE}" ]; then
RUN_DIR=`echo build/testenv/lib/python*/site-packages`
# Produce gcov output for codecov to find
find build -name '*.gcno' -type f -exec gcov -pb {} +
mv *.gcov "$RUN_DIR/"
# Run codecov
pushd "$RUN_DIR"
codecov -X gcov
popd
fi
notifications:
# Perhaps we should have status emails sent to the mailing list, but
# let's wait to see what people think before turning that on.
email: false