Skip to content

(Closes #2716) Add support for module-inlining calls to polymorphic kernels/routines #8950

(Closes #2716) Add support for module-inlining calls to polymorphic kernels/routines

(Closes #2716) Add support for module-inlining calls to polymorphic kernels/routines #8950

# -----------------------------------------------------------------------------
# BSD 3-Clause License
#
# Copyright (c) 2020-2024, Science and Technology Facilities Council.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# * Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# -----------------------------------------------------------------------------
# Author A. R. Porter, STFC Daresbury Lab
# Modified by R. W. Ford, STFC Daresbury Lab
# Modified by A. J. Voysey, Met Office
# Modified by J. Henrichs, Bureau of Meteorology
# Modified by N. Nobre, STFC Daresbury Lab
# This workflow will install Python dependencies, run tests and lint with a
# variety of Python versions.
# For more information see:
# https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: PSyclone tests and examples
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build-documentation:
if: ${{ github.repository != 'stfc/PSyclone-mirror' }}
# Check all Sphinx documentation for dead links.
runs-on: ubuntu-latest
env:
GITHUB_PR_NUMBER: ${{ github.event.number }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.13'
- run: sudo apt-get install -y graphviz doxygen
- run: python -m pip install --upgrade pip
- run: pip install .[doc]
# First we need to build the docs and launch a server, otherwise the
# intershpinx links would be broken
- run: cd doc/user_guide; make html
- run: cd doc/developer_guide; make html
- run: cd doc/reference_guide; make html
- run: cd doc/psyad/user_guide; make html
- run: cd doc; python -m http.server &
# Now we can check for warnings and broken links
- run: cd doc/user_guide; make html SPHINXOPTS="-W --keep-going"
- run: cd doc/developer_guide; make html SPHINXOPTS="-W --keep-going"
- run: cd doc/reference_guide; make html SPHINXOPTS="-W --keep-going"
- run: cd doc/psyad/user_guide; make html SPHINXOPTS="-W --keep-going"
- run: cd doc/user_guide; make linkcheck
- run: cd doc/developer_guide; make linkcheck
- run: cd doc/reference_guide; make linkcheck
- run: cd doc/psyad/user_guide; make linkcheck
dev-doctest:
if: ${{ github.repository != 'stfc/PSyclone-mirror' }}
# Check doctests of developer's guide
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.13'
- run: python -m pip install --upgrade pip
- run: pip install .[doc]
# Sphinx since version 7.2 (7.2.0/1/2) aborts with
# exec('from sympy import *', global_dict)
# File "<string>", line 1, in <module>
# AttributeError: module 'sympy' has no attribute 'external'
# when it is run without creating the documentation first.
# So till this is fixed in Sphinx, we trigger the creation
# of the html documents before actually running doctest
- run: cd doc/developer_guide; make html; make doctest
build:
if: ${{ github.repository != 'stfc/PSyclone-mirror' }}
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.7, 3.8, 3.13]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
# This is required to get the commit history for merge commits for
# the ci-skip check below.
fetch-depth: '0'
- name: Check for [skip ci] in commit message
uses: mstachniuk/ci-skip@v1
with:
# This setting causes the tests to 'fail' if [skip ci] is specified
fail-fast: true
commit-filter: '[skip ci]'
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
# Some of the examples use Jupyter. We need to keep IPython to
# below 8.0 as we still run the test suite with Python 3.7.
pip install "ipython>=7.0,<8.0" jupyter
# Uncomment the below to use the submodule version of fparser rather
# than the latest release from pypi.
# pip install external/fparser
pip install .[test]
- name: Lint with flake8
run: |
# Stop the build if there are Python syntax errors or undefined names.
# See PSyclone/setup.cfg for configuration of this check.
flake8 --count --show-source --statistics .
- name: Run examples
run: |
( make -j 2 -C examples transform > /dev/null )
( make -C examples notebook )
- name: Run tutorials
run: |
( make -C tutorial/practicals transform > /dev/null )
# Jupyter notebooks are out-of-date
# ( make -C tutorial/notebooks notebook )
- name: Test with pytest
if: ${{ !(matrix.python-version == 3.8) }}
run: |
locale
pytest -n auto --cov=psyclone --cov-report=xml src/psyclone/tests
- name: Test with pytest and C Locale
if: ${{ matrix.python-version == 3.8 }}
run: |
locale
pytest -n auto --cov=psyclone --cov-report=xml src/psyclone/tests
env:
LC_ALL: C
LANG: C
- name: Upload coverage to Codecov with GitHub Action
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
verbose: true