Skip to content

Tuned the examples a little more. Tried to get JaxBiotSavart working … #452

Tuned the examples a little more. Tried to get JaxBiotSavart working …

Tuned the examples a little more. Tried to get JaxBiotSavart working … #452

Workflow file for this run

# This file is based on examples in
# https://docs.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions
# Note that all the "sudo" commands here appear to cause a warning message
# "sudo: setrlimit(RLIMIT_CORE): operation not permitted"
# This appears to be a known harmless annoyance:
# https://gitlab.alpinelinux.org/alpine/aports/-/issues/11122
name: Tests
on:
push:
branches-ignore: [master]
tags-ignore: [v*]
pull_request:
branches-ignore: [master]
jobs:
test:
runs-on: ubuntu-latest
env:
OMPI_ALLOW_RUN_AS_ROOT: 1
OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1
strategy:
fail-fast: false
matrix:
python-version: [3.9]
test-type: [unit, integrated]
steps:
# First print out lots of information. We do this in separate
# "name" blocks because otherwise the output gets mixed together
# in the github actions log.
- name: Print user and group id
run: |
set -ex
id
- name: PWD
run: |
set -ex
pwd
- name: ls -l
run: |
set -ex
ls -l
- name: Print python location
run: |
set -ex
which python
- name: apt-get stuff needed for libstell and vmec
run: |
sudo apt-get update
sudo apt-get install -y build-essential gfortran openmpi-bin libopenmpi-dev libnetcdf-dev libnetcdff-dev liblapack-dev libscalapack-mpi-dev libhdf5-dev libhdf5-serial-dev git m4 libfftw3-dev libboost-all-dev libopenblas-dev
- uses: actions/checkout@v4
- name: Fetch all history for all tags
run: git fetch --all --tags --prune --unshallow
# We must run actions/checkout before downloading and building VMEC, since checkout deletes the contents of the directory.
- name: Download the VMEC2000 standalone repository
run: git clone --depth=1 https://github.com/hiddensymmetries/VMEC2000.git
- name: ls -l again
run: |
set -ex
ls -l
pwd
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: which python3 after python setup
run: which python3
- name: which pip after python setup
run: |
python -m pip install --upgrade pip
pip --version
- name: env after adding python
run: env
- name: Install python dependencies
run: |
sudo apt-get install graphviz graphviz-dev
pip install "numpy<2.0.0" cmake scikit-build f90nml ninja wheel setuptools sympy qsc pyevtk matplotlib plotly networkx pygraphviz mpi4py py_spec h5py ground bentley_ottmann f90wrap
- name: Install pyoculus
run: pip install -v git+https://github.com/zhisong/pyoculus
- name: Install booz_xform
run: pip install -v git+https://github.com/hiddenSymmetries/booz_xform
- name: Install virtual_casing
run: pip install -v git+https://github.com/hiddenSymmetries/virtual-casing
# See https://github.community/t/best-way-to-clone-a-private-repo-during-script-run-of-private-github-action/16116/7
# https://stackoverflow.com/questions/57612428/cloning-private-github-repository-within-organisation-in-actions
# https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token
- name: Check out SPEC
uses: actions/checkout@v4
with:
repository: PrincetonUniversity/SPEC
path: SPEC
- name: ls -l again
run: |
ls -l
pwd
- name: ls -l inside SPEC
run: |
cd SPEC
pwd
ls -l
# For some reason, installing py_spec does not install the dependencies f90nml and h5py. Therefore I installed these manually above.
- name: Install py_spec
run: |
pip install -r SPEC/Utilities/pythontools/requirements.txt
pip install -e SPEC/Utilities/pythontools
python -c "import py_spec; print('success')"
- name: Build SPEC python wrapper.
run: |
cd SPEC
pip install .
- name: Try import spec
run: python -c "import spec.spec_f90wrapped as spec; print(spec.constants.version)"
- name: ls in /usr/lib/x86_64-linux-gnu
run: ls -l /usr/lib/x86_64-linux-gnu
- name: Add to LD_LIBRARY_PATH so scalapack etc can be found
run: echo "LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu" >> $GITHUB_ENV
- name: env after adding to LD_LIBRARY_PATH
run: env
- name: ls in VMEC2000/python 1
run: ls -l VMEC2000/python
- name: Configure and install VMEC2000 module
run: |
cd VMEC2000
cp cmake/machines/ubuntu.json cmake_config_file.json
cat cmake_config_file.json
pip install .
- name: Try importing vmec module
run: python -c "print(dir()); import vmec; print(dir()); print(dir(vmec)); print('package:', vmec.__package__); print('spec:', vmec.__spec__); print('doc:', vmec.__doc__); print('file:', vmec.__file__); print('path:', vmec.__path__)"
- name: Install simsopt package
# run: env CMAKE_BUILD_TYPE=Debug pip install -v .[MPI,SPEC]
run: pip install -v ".[MPI,SPEC,VIS]"
- name: Verify that importing simsopt does not automatically initialize MPI
run: ./tests/verify_MPI_not_initialized.py
- name: Run examples as part of integrated tests
if: contains(matrix.test-type, 'integrated')
run: |
cd examples
./run_serial_examples
./run_parallel_examples
./run_vmec_examples
./run_spec_examples
./run_spec_vmec_examples
- name: Install coverage dependencies
if: contains(matrix.test-type, 'unit')
run: pip install coverage
- name: Run tests on 1 process using coverage
if: contains(matrix.test-type, 'unit')
run: |
coverage run --source=simsopt -m unittest discover -t tests -v -s tests/core
coverage run --source=simsopt -m unittest discover -t tests -v -s tests/field
coverage run --source=simsopt -m unittest discover -t tests -v -s tests/geo
coverage run --source=simsopt -m unittest discover -t tests -v -s tests/mhd
coverage run --source=simsopt -m unittest discover -t tests -v -s tests/objectives
coverage run --source=simsopt -m unittest discover -t tests -v -s tests/solve
coverage run --source=simsopt -m unittest discover -t tests -v -s tests/util
- name: Run MPI tests using coverage
if: contains(matrix.test-type, 'unit')
run: |
mpiexec -n 1 coverage run -m unittest discover -k "mpi" -s tests -v
mpiexec -n 2 coverage run -m unittest discover -k "mpi" -s tests -v
mpiexec -n 3 --oversubscribe coverage run -m unittest discover -k "mpi" -s tests -v
- name: ls to see coverage files that were produced
if: contains(matrix.test-type, 'unit')
run: ls -al
- name: Combine coverage reports
if: contains(matrix.test-type, 'unit')
run: |
coverage combine
coverage report
coverage xml
- name: Upload coverage to github
if: contains(matrix.test-type, 'unit')
uses: actions/upload-artifact@v4
with:
name: tox-gh-actions-coverage
path: coverage.xml
if-no-files-found: error
- name: Upload coverage to Codecov
# The last conditional on the next line prevents github from trying to upload to Codecov on forks of the repository, avoiding a permissions error
if: contains(matrix.test-type, 'unit') && github.repository_owner == 'hiddenSymmetries'
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.xml
#files: ./coverage1.xml,./coverage2.xml
#directory: ./coverage/reports/
flags: unittests
env_vars: PYTHON
name: codecov-umbrella
fail_ci_if_error: true
#path_to_write_report: ./coverage/codecov_report.gz
verbose: true