Skip to content

Commit

Permalink
GHA: Fix CI issues
Browse files Browse the repository at this point in the history
  • Loading branch information
dalcinl committed Apr 24, 2024
1 parent c5fee86 commit df58594
Show file tree
Hide file tree
Showing 8 changed files with 145 additions and 100 deletions.
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
85 changes: 66 additions & 19 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,76 @@
name: github-CI
name: main

on: [push]
on:
push:
branches:
- master
pull_request:
branches:
- master
workflow_dispatch:

jobs:
build:

test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
name: Python ${{ matrix.python-version }} example
os:
- ubuntu-latest
- macos-latest
mpi:
- mpich
- openmpi
py:
# - "3.7"
# - "3.8"
# - "3.9"
- "3.10"
- "3.11"
- "3.12"

steps:
- uses: actions/checkout@v3
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
- name: setup-conda
uses: s-weigand/setup-conda@v1

- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
update-conda: true
python-version: ${{ matrix.python-version }}
conda-channels: anaconda, conda-forge
- run: conda --version
- run: which python
python-version: ${{ matrix.py }}

- run: |
conda config --set always_yes yes
conda install -n root conda-build numpy fftw
conda build ./conf
# Install fftw
case $(uname) in
Linux)
sudo apt update
sudo apt install -y -q libfftw3-dev
;;
Darwin)
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
brew install fftw
;;
esac
- run: python -m pip install -U pip build

- run: python -m build

- uses: mpi4py/setup-mpi@v1
with:
mpi: ${{ matrix.mpi }}

- run: pip install -vvv dist/mpi4py_fft-*.whl
env:
CFLAGS: "-O0"

- run: pip install -r conf/requirements-test.txt

- if: matrix.mpi == 'mpich' && startsWith(matrix.os, 'ubuntu')
run: ./runtests.sh
working-directory: tests

- if: matrix.mpi == 'mpich' && startsWith(matrix.os, 'ubuntu')
uses: codecov/codecov-action@v4
with:
use_oidc: true
files: test/coverage.xml
name: ${{ matrix.os }}-${{ matrix.mpi }}-${{ matrix.py }}
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ _templates/
*.dat
*.html
*.xml
*.txt
*.h5
*.nc
*.xdmf
Expand Down
75 changes: 41 additions & 34 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
jobs:
- job: macOS
displayName: macos-latest
pool:
vmImage: 'macos-latest'
strategy:
matrix:
Python37:
python.version: '3.7'
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'

steps:
- bash: echo "##vso[task.prependpath]$CONDA/bin"
displayName: Add conda to PATH

- bash: sudo chown -R $USER $CONDA
displayName: Take ownership of conda installation

- bash: |
conda config --add channels conda-forge
conda config --set always_yes yes
conda install -n root conda-build numpy fftw
displayName: Set up Anaconda
- bash: |
conda build --python $PYTHON_VERSION ./conf
displayName: Build and test
# - job: macOS
# displayName: macos-latest
# pool:
# vmImage: 'macos-latest'
# strategy:
# matrix:
# Python37:
# python.version: '3.7'
# Python38:
# python.version: '3.8'
# Python39:
# python.version: '3.9'
# Python310:
# python.version: '3.10'
#
# steps:
# - bash: echo "##vso[task.prependpath]$CONDA/bin"
# displayName: Add conda to PATH
#
# - bash: sudo chown -R $USER $CONDA
# displayName: Take ownership of conda installation
#
# - bash: |
# conda config --add channels conda-forge
# conda config --set always_yes yes
# conda install -n root conda-build numpy fftw
# displayName: Set up Anaconda
#
# - bash: |
# conda build --python $PYTHON_VERSION ./conf
# displayName: Build and test

- job: Ubuntu
displayName: Ubuntu
Expand All @@ -45,6 +45,10 @@ jobs:
python.version: '3.9'
Python310:
python.version: '3.10'
Python311:
python.version: '3.11'
Python312:
python.version: '3.12'

steps:
- bash: echo "##vso[task.prependpath]$CONDA/bin"
Expand All @@ -53,13 +57,16 @@ jobs:
- bash: |
conda config --add channels conda-forge
conda config --set always_yes yes
conda install -n root conda-build numpy fftw
conda install -n root mpi4py mpich numpy fftw
displayName: Set up Anaconda
- bash: |
conda build --no-test --python $PYTHON_VERSION ./conf
conda create --name mpi4py_fft_env mpi4py_fft_test coverage scipy pyfftw=0.12 python=$PYTHON_VERSION --use-local
conda create --name mpi4py_fft_env \
python=$PYTHON_VERSION \
mpi4py mpich numpy fftw \
pyfftw scipy coverage
source activate mpi4py_fft_env
pip install -vvv --no-deps .
pip install codecov
cd tests && ./runtests.sh
displayName: Build and test
Expand Down
3 changes: 3 additions & 0 deletions conf/requirements-test.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
coverage
pyfftw; sys_platform == 'linux' and python_version < '3.12'
scipy
64 changes: 26 additions & 38 deletions tests/runtests.sh
Original file line number Diff line number Diff line change
@@ -1,47 +1,35 @@
#!/bin/sh
set -e

PY=$(python -c 'import sys; print(sys.version_info.major)')
export OMPI_MCA_plm=isolated
export OMPI_MCA_btl_vader_single_copy_mechanism=none
export OMPI_MCA_rmaps_base_oversubscribe=yes
export OMPI_MCA_plm_ssh_agent=false
export OMPI_MCA_pml=ob1
export OMPI_MCA_btl=tcp,self
export OMPI_MCA_mpi_yield_when_idle=true
export OMPI_MCA_btl_base_warn_component_unused=false
export OMPI_MCA_rmaps_base_oversubscribe=true
export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe

if [ $PY -eq 3 ]; then
# coverage only for python version 3
python -m coverage erase

python -m coverage erase
python -m coverage run -m test_fftw
python -m coverage run -m test_libfft
python -m coverage run -m test_io
python -m coverage run -m test_darray

python -m coverage run -m test_fftw
python -m coverage run -m test_libfft
python -m coverage run -m test_io
python -m coverage run -m test_darray
mpiexec -n 2 python -m coverage run -m test_pencil
mpiexec -n 2 python -m coverage run -m test_pencil
#mpiexec -n 4 python -m coverage test_pencil.py
#mpiexec -n 8 python -m coverage test_pencil.py

#mpiexec -n 4 python -m coverage test_pencil.py
#mpiexec -n 8 python -m coverage test_pencil.py
mpiexec -n 2 python -m coverage run -m test_mpifft
#mpiexec -n 4 python -m coverage test_mpifft.py
# mpiexec -n 8 python -m coverage test_mpifft.py
# mpiexec -n 12 python -m coverage test_mpifft.py
mpiexec -n 2 python -m coverage run spectral_dns_solver.py
mpiexec -n 2 python -m coverage run -m test_io
#mpiexec -n 4 python -m coverage run -m test_io
mpiexec -n 2 python -m coverage run -m test_darray
#mpiexec -n 4 python -m coverage run -m test_darray
mpiexec -n 2 python -m coverage run -m test_mpifft
#mpiexec -n 4 python -m coverage test_mpifft.py
#mpiexec -n 8 python -m coverage test_mpifft.py
#mpiexec -n 12 python -m coverage test_mpifft.py
mpiexec -n 2 python -m coverage run spectral_dns_solver.py

python -m coverage combine
mpiexec -n 2 python -m coverage run -m test_io
#mpiexec -n 4 python -m coverage run -m test_io
mpiexec -n 2 python -m coverage run -m test_darray
#mpiexec -n 4 python -m coverage run -m test_darray

else
python test_fftw.py
python test_libfft.py
mpiexec -n 2 python test_pencil.py
#mpiexec -n 4 python test_pencil.py
#mpiexec -n 8 python test_pencil.py
mpiexec -n 2 python test_mpifft.py
#mpiexec -n 4 python test_mpifft.py
# mpiexec -n 8 python test_mpifft.py
# mpiexec -n 12 python test_mpifft.py
mpiexec -n 2 python test_io.py
mpiexec -n 2 python test_darray.py
mpiexec -n 2 python spectral_dns_solver.py
fi
python -m coverage combine
python -m coverage xml
4 changes: 2 additions & 2 deletions tests/test_mpifft.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,8 @@ def test_mpifft():
fft.backward.input_array.shape)
assert (fft.backward.output_pencil.subshape ==
fft.backward.output_array.shape)
assert np.alltrue(np.array(fft.global_shape(True)) == np.array(fft.forward.output_pencil.shape))
assert np.alltrue(np.array(fft.global_shape(False)) == np.array(fft.forward.input_pencil.shape))
assert np.all(np.array(fft.global_shape(True)) == np.array(fft.forward.output_pencil.shape))
assert np.all(np.array(fft.global_shape(False)) == np.array(fft.forward.input_pencil.shape))
ax = -1 if axes is None else axes[-1] if isinstance(axes[-1], int) else axes[-1][-1]
assert fft.forward.input_pencil.substart[ax] == 0
assert fft.backward.output_pencil.substart[ax] == 0
Expand Down
7 changes: 1 addition & 6 deletions tests/test_speed.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
from time import time
import numpy as np
import pyfftw
import scipy.fftpack as sp
from mpi4py_fft import fftw
import pickle

try:
import pyfftw
except ImportError:
print('pyFFTW not available')
raise SystemExit(0)

try:
#fftw.import_wisdom('wisdom.dat')
pyfftw.import_wisdom(pickle.load(open('pyfftw.wisdom', 'rb')))
Expand Down

0 comments on commit df58594

Please sign in to comment.