Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@ jobs:
- run:
name: Check Qt
command: |
./tools/check_qt_import.sh PyQt6
set -x
./tools/check_qt_import.sh ${MNE_QT_BACKEND}
# Load tiny cache so that ~/.mne does not need to be created below
- restore_cache:
keys:
Expand Down
147 changes: 62 additions & 85 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,34 +38,27 @@ stages:
- job: All
pool:
vmImage: 'ubuntu-latest'
variables:
PYTHON_VERSION: '3.11'
PYTHON_ARCH: 'x64'
steps:
- bash: echo $(COMMIT_MSG)
- task: UsePythonVersion@0
inputs:
versionSpec: $(PYTHON_VERSION)
architecture: $(PYTHON_ARCH)
versionSpec: '3.14'
architecture: 'x64'
addToPath: true
displayName: 'Get Python'
displayName: Get Python
- bash: |
set -eo pipefail
python -m pip install --progress-bar off --upgrade pip build
python -m pip install --progress-bar off -ve .[hdf5] --group=test
python -m pip install --only-binary=":all:" --progress-bar off -ve .[hdf5] --group=test
python -m pip uninstall -yq pytest-qt # don't want to set up display, etc. for this
pre-commit install --install-hooks
displayName: Install dependencies
- bash: |
make pre-commit
- bash: make pre-commit
displayName: make pre-commit
condition: always()
- bash: |
make nesting
- bash: make nesting
displayName: make nesting
condition: always()
- bash: |
make check-readme
- bash: make check-readme
displayName: make check-readme
condition: always()
- bash: mypy
Expand All @@ -75,7 +68,6 @@ stages:
displayName: vulture
condition: always()


- stage: Test
condition: and(succeeded(), eq(dependencies.Check.outputs['Skip.result.start_main'], 'true'))
dependsOn: ['Style', 'Check']
Expand All @@ -89,57 +81,50 @@ stages:
DISPLAY: ':99'
OPENBLAS_NUM_THREADS: '1'
OMP_NUM_THREADS: '1'
MNE_TEST_ALLOW_SKIP: '^.*(PySide6 causes segfaults).*$'
MNE_TEST_ALLOW_SKIP: '^$' # nothing
MNE_BROWSER_PRECOMPUTE: 'false'
steps:
- bash: |
set -eo pipefail
set -xeo pipefail
./tools/setup_xvfb.sh
sudo apt install -yq tcsh
displayName: 'Install Ubuntu dependencies'
- bash: |
source tools/get_minimal_commands.sh
displayName: 'Install minimal commands'
displayName: Install Ubuntu dependencies
- bash: ./tools/get_minimal_commands.sh
displayName: Get minimal commands
- bash: |
echo $PATH
mne_surf2bem --version
fsl_rigid_register --version
displayName: 'Test minimal commands'
displayName: Test minimal commands
- task: UsePythonVersion@0
inputs:
versionSpec: '3.12'
architecture: 'x64'
addToPath: true
displayName: 'Get Python'
- bash: |
set -eo pipefail
set -xeo pipefail
python -m pip install --progress-bar off --upgrade pip
python -m pip install --progress-bar off "mne-qt-browser @ https://github.com/mne-tools/mne-qt-browser/archive/refs/heads/main.zip" pyvista scikit-learn python-picard qtpy nibabel sphinx-gallery "PySide6!=6.8.0,!=6.8.0.1,!=6.8.1.1,!=6.9.1" pandas neo pymatreader antio defusedxml curryreader pymef
python -m pip uninstall -yq mne
python -m pip install --progress-bar off --upgrade -e . --group=test
displayName: 'Install dependencies with pip'
python -m pip install --progress-bar off --upgrade --only-binary=":all:" -e . --group=test "mne-qt-browser @ https://github.com/mne-tools/mne-qt-browser/archive/refs/heads/main.zip" pyvista scikit-learn python-picard qtpy nibabel sphinx-gallery "PySide6!=6.8.0,!=6.8.0.1,!=6.8.1.1,!=6.9.1" pandas neo pymatreader antio defusedxml curryreader pymef
displayName: Install dependencies with pip
- bash: ./tools/check_qt_import.sh PySide6
displayName: Check Qt import
- bash: |
set -eo pipefail
set -xeo pipefail
mne sys_info -pd
mne sys_info -pd | grep "qtpy .*(PySide6=.*)$"
displayName: Print config
- bash: |
set -eo pipefail
LD_DEBUG=libs python -c "from PySide6.QtWidgets import QApplication, QWidget; app = QApplication([]); import matplotlib; matplotlib.use('QtAgg'); import matplotlib.pyplot as plt; plt.figure()"
- bash: source tools/get_testing_version.sh
displayName: 'Get testing version'
- bash: ./tools/get_testing_version.sh
displayName: Get testing version
- task: Cache@2
inputs:
key: $(testing_version)
path: /home/vsts/mne_data
displayName: 'Cache testing data'
- bash: ./tools/github_actions_download.sh
displayName: 'Get test data'
displayName: Download testing data
- script: pytest -m "ultraslowtest or pgtest" --tb=short --cov=mne --cov-report=xml -vv mne
displayName: 'slow and mne-qt-browser tests'
# Coverage
displayName: slow and mne-qt-browser tests
- bash: bash <(curl -s https://codecov.io/bash)
displayName: 'Codecov'
displayName: Codecov
condition: succeededOrFailed()

- job: Linux_Qt_Bindings
Expand All @@ -148,59 +133,54 @@ stages:
variables:
DISPLAY: ':99'
OPENBLAS_NUM_THREADS: '1'
TEST_OPTIONS: "--tb=short --cov=mne --cov-report=xml --cov-append -vv mne/viz/_brain mne/viz/backends mne/viz/tests/test_evoked.py mne/gui mne/report"
MNE_TEST_ALLOW_SKIP: '^.*(PySide6 causes segfaults).*$'
TEST_OPTIONS: "--tb=short --cov=mne --cov-report=xml --cov-append -vv mne/gui mne/viz/_brain mne/viz/backends mne/viz/tests/test_evoked.py mne/report"
MNE_TEST_ALLOW_SKIP: '^$' # nothing (can be overridden below)
steps:
- bash: ./tools/setup_xvfb.sh
displayName: 'Install Ubuntu dependencies'
displayName: Setup up Xvfb
- task: UsePythonVersion@0
inputs:
versionSpec: '3.10'
versionSpec: '3.14'
architecture: 'x64'
addToPath: true
displayName: 'Get Python'
- bash: |
set -eo pipefail
set -xeo pipefail
python -m pip install --progress-bar off --upgrade pip
python -m pip install --progress-bar off --upgrade --pre --only-binary=\"numpy,scipy,matplotlib,vtk\" numpy scipy matplotlib vtk
python -m pip install --progress-bar off --upgrade --only-binary=":all:" -e .[full-pyside6] --group=test_extra "mne-qt-browser @ https://github.com/mne-tools/mne-qt-browser/archive/refs/heads/main.zip"
python -c "import vtk"
python -m pip install --progress-bar off --upgrade -ve .[full] --group=test_extra "mne-qt-browser @ https://github.com/mne-tools/mne-qt-browser/archive/refs/heads/main.zip"
displayName: 'Install dependencies with pip'
displayName: Install dependencies with pip
- bash: |
set -e
set -xeo pipefail
which mne
mne sys_info -pd
python ./tools/check_mne_location.py
displayName: Print config
- bash: source tools/get_testing_version.sh
displayName: 'Get testing version'
- bash: ./tools/get_testing_version.sh
displayName: Get testing version
- task: Cache@2
inputs:
key: $(testing_version)
path: /home/vsts/mne_data
displayName: 'Cache testing data'
- bash: ./tools/github_actions_download.sh
displayName: 'Get test data'
displayName: Download testing data
- bash: ./tools/check_qt_import.sh PySide6
displayName: Check Qt import
- bash: |
set -eo pipefail
python -m pip install PyQt6
LD_DEBUG=libs python -c "from PyQt6.QtWidgets import QApplication, QWidget; app = QApplication([]); import matplotlib; matplotlib.use('QtAgg'); import matplotlib.pyplot as plt; plt.figure()"
displayName: 'Check Qt import'
set -xeo pipefail
mne sys_info -pd
mne sys_info -pd | grep "qtpy .* (PySide6=.*)$"
export MNE_TEST_ALLOW_SKIP="^.*PySide6 causes segfaults.*$"
PYTEST_QT_API=PySide6 pytest -m "not ultraslowtest" ${TEST_OPTIONS}
python -m pip uninstall -yq PySide6
displayName: PySide6
- bash: |
set -eo pipefail
set -xeo pipefail
python -m pip install PyQt6
mne sys_info -pd
mne sys_info -pd | grep "qtpy .* (PyQt6=.*)$"
PYTEST_QT_API=PyQt6 pytest -m "not ultraslowtest" ${TEST_OPTIONS}
python -m pip uninstall -yq PyQt6 PyQt6-sip PyQt6-Qt6
displayName: 'PyQt6'
- bash: |
set -eo pipefail
python -m pip install "PySide6!=6.8.0,!=6.8.0.1,!=6.9.1"
mne sys_info -pd
mne sys_info -pd | grep "qtpy .* (PySide6=.*)$"
PYTEST_QT_API=PySide6 pytest -m "not ultraslowtest" ${TEST_OPTIONS}
python -m pip uninstall -yq PySide6
displayName: 'PySide6'
displayName: PyQt6
# PyQt5 leaves cruft behind, so run it last
- bash: |
set -eo pipefail
Expand All @@ -209,10 +189,9 @@ stages:
mne sys_info -pd | grep "qtpy .* (PyQt5=.*)$"
PYTEST_QT_API=PyQt5 pytest -m "not ultraslowtest" ${TEST_OPTIONS}
python -m pip uninstall -yq PyQt5 PyQt5-sip PyQt5-Qt5
displayName: 'PyQt5'
# Coverage
displayName: PyQt5
- bash: bash <(curl -s https://codecov.io/bash)
displayName: 'Codecov'
displayName: Codecov
condition: succeededOrFailed()

- job: Windows
Expand All @@ -224,53 +203,51 @@ stages:
OPENBLAS_NUM_THREADS: '2'
OMP_DYNAMIC: 'false'
PYTHONUNBUFFERED: 1
PYTHONIOENCODING: 'utf-8'
AZURE_CI_WINDOWS: 'true'
PYTHON_ARCH: 'x64'
MNE_CI_KIND: $(TEST_MODE)
MNE_TEST_ALLOW_SKIP: $(MNE_TEST_ALLOW_SKIP)
timeoutInMinutes: 95
strategy:
maxParallel: 4
matrix:
3.11 pip:
TEST_MODE: 'pip'
PYTHON_VERSION: '3.11'
MNE_TEST_ALLOW_SKIP: "^.*(Requires MNE-C|CUDA not| on Windows|MNE_FORCE_SERIAL|PySide6 causes segfaults).*$"
3.13 pip pre:
TEST_MODE: 'pip-pre'
PYTHON_VERSION: '3.13'
MNE_TEST_ALLOW_SKIP: "^.*(Requires (spm|brainstorm) dataset|Requires MNE-C|CUDA not|Numba not| on Windows|MNE_FORCE_SERIAL|PySide6 causes segfaults).*$"
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: $(PYTHON_VERSION)
architecture: $(PYTHON_ARCH)
architecture: 'x64'
addToPath: true
displayName: 'Get Python'
- bash: |
set -eo pipefail
set -xeo pipefail
git clone --depth 1 https://github.com/pyvista/setup-headless-display-action.git
MESA3D_VERSION=24.3.0 bash setup-headless-display-action/windows/install_opengl.sh
displayName: Install OpenGL
- bash: ./tools/azure_dependencies.sh
displayName: Install dependencies with pip
- script: pip install -e .
displayName: 'Install MNE-Python dev'
- script: pip install --only-binary=":all:" -e .
displayName: Install mne
- script: mne sys_info -pd
displayName: 'Print config'
displayName: Print config
- script: python -c "import numpy; numpy.show_config()"
displayName: Print NumPy config
- script: python -c "import numpy; import scipy.linalg; import sklearn.neighbors; from threadpoolctl import threadpool_info; from pprint import pprint; pprint(threadpool_info())"
displayName: Print threadpoolctl info
- bash: source tools/get_testing_version.sh
displayName: 'Get testing version'
- bash: ./tools/get_testing_version.sh
- task: Cache@2
inputs:
key: $(testing_version)
path: C:\Users\VssAdministrator\mne_data
displayName: 'Cache testing data'
displayName: Cache testing data
- bash: ./tools/github_actions_download.sh
displayName: 'Get test data'
displayName: Download testing data
- script: pytest -m "not (slowtest or pgtest)" --tb=short --cov=mne --cov-report=xml -vv mne
displayName: 'Run tests'
displayName: Run tests
- bash: bash <(curl -s https://codecov.io/bash)
displayName: 'Codecov'
displayName: Codecov
condition: succeededOrFailed()
2 changes: 1 addition & 1 deletion doc/sphinxext/related_software.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
alphaCSC
autoreject
bycycle
conpy
curryreader
dcm2niix
eeg_positions
emd
fooof
hedtools
meegkit
meggie
mne-ari
Expand Down
12 changes: 6 additions & 6 deletions doc/sphinxext/related_software_nodeps.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# deps with onerous requirements (tensorflow, wxPython, mayavi, opencv)
cross-domain-saliency-maps
fsleyes
mne-kit-gui
mne-videobrowser
hedtools # because it limits our Pandas version currently
# deps with onerous requirements
conpy # requires future and subprocess32, which don't have wheels
cross-domain-saliency-maps # tensorflow
fsleyes # wxPython
mne-kit-gui # mayavi
mne-videobrowser # opencv
zuna # requires pytorch
Loading
Loading