Skip to content

Prettyform

Prettyform #34

Workflow file for this run

# ------------------------------------------------------------------ #
# #
# SymPy CI script for Github Actions #
# #
# Runs each time a pull request is opened, pushed or merged #
# #
# ------------------------------------------------------------------ #
name: test
on: [push, pull_request]
jobs:
# -------------------- Code quality ------------------------------ #
code-quality:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pip install ruff
- name: Basic code quality tests
run: bin/test quality
- name: Run Ruff on the sympy package
run: ruff check sympy
- name: Run flake8 on the sympy package
run: flake8 sympy
- name: Detect invalid escapes like '\e'
run: python -We:invalid -We::SyntaxWarning -m compileall -f -q sympy/
- name: Test all modules are listed in setup.py
run: bin/test_setup.py
- run: pip install slotscheck .
- name: Check for incorrect use of ``__slots__`` using slotscheck
run: python -m slotscheck --exclude-modules "(sympy.parsing.autolev._antlr.*|sympy.parsing.latex._antlr.*|sympy.galgebra|sympy.plotting.pygletplot.*)" sympy
# -- temporarily disabled -- #
# These checks were too difficult for new contributors. They will
# need to be made easier to work with before they are reenabled.
#- name: Test for ambiguous author information in commits
# run: bin/mailmap_update.py
#- name: Make sure all commits have an associated author
# run: bin/authors_update.py
# ----------------------------- mypy ----------------------------- #
mypy:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install mpmath mypy hypothesis
- name: Run mypy on the sympy package
run: mypy sympy
# ------------------------- sphinx-lint -------------------------- #
sphinx-lint:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install sphinx-lint
- name: Run sphinx-lint on the sympy documentation
run: sphinx-lint doc/
# --------------------------- check authors ---------------------- #
authors:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
with:
# Clone full git history (needed for detecting authors)
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install mpmath
- run: bin/mailmap_check.py
# -------------------- Doctests latest Python -------------------- #
doctests-latest:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install mpmath
- run: bin/doctest --force-colors
# ------------------------- Test latest Python ------------------- #
tests-latest:
needs: code-quality
runs-on: ubuntu-20.04
name: Tests
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pytest -n auto
# -------------------- Optional dependency tests ----------------- #
optional-dependencies:
needs: code-quality
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12']
name: ${{ matrix.python-version }} Optional Dendendencies
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: pip install -r requirements-dev.txt
# Install the non-Python dependencies
- run: sudo apt-get update
- run: sudo apt-get install antlr4 clang
- run: python -m pip install --upgrade pip wheel setuptools
# dependencies to install in all Python versions:
- run: pip install numpy numexpr matplotlib ipython cython \
wurlitzer autowrap lxml lark z3-solver pycosat \
jax jaxlib libclang scipy aesara \
'antlr4-python3-runtime==4.11.*' \
symengine \
numba llvmlite pymc \
gmpy2 \
#
# Test external imports
- run: bin/test_external_imports.py
- run: bin/test_submodule_imports.py
- run: bin/test_executable.py
# Test modules with specific dependencies
- run: bin/test_optional_dependencies.py
# -------------------- Bleeding edge dependencies ----------------- #
bleeding-edge:
needs: code-quality
name: Bleeding edge dependencies
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: pip install --upgrade pip
- run: pip install git+https://github.com/mpmath/mpmath.git@master
- run: |
python -m pip install \
--pre \
--index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple \
--upgrade --only-binary=:all: \
python-flint \
numpy \
scipy \
#
- run: pip install -r requirements-dev.txt
- run: pip install .
- run: pytest -n auto
# -------------------- FLINT tests -------------------------------- #
python-flint:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pip install python-flint
- run: pip install .
- run: pytest -n auto
# -------------------- FLINT+gmpy2 ------------------------------ #
flint-gmpy2:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pip install python-flint gmpy2
- run: pip install .
- run: pytest -n auto
# -------------------- Tensorflow tests -------------------------- #
tensorflow:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
# tensorflow not yet available for 3.12
python-version: '3.11'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pip install numpy scipy tensorflow
# Test modules that can use tensorflow
- run: bin/test_tensorflow.py
# -------------------- SymEngine tests --------------------------- #
symengine:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
# symengine not yet available for 3.12
python-version: '3.11'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pip install numpy symengine
# Test modules that can use tensorflow
- run: bin/test_symengine.py
env:
USE_SYMENGINE: '1'
# ------------------------- Slow tests --------------------------- #
tests-slow:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pytest -m slow --timeout 595 -n auto
# -------------------- Test older (and newer) Python --------------- #
tests-other-python:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.13-dev', 'pypy-3.9']
name: ${{ matrix.python-version }} Tests
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pytest -n auto
# -------------------- Doctests older (and newer) Python --------------------- #
doctests-other-python:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11', '3.13-dev', 'pypy-3.9']
name: ${{ matrix.python-version }} Doctests
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install --upgrade pip
- run: pip install mpmath
- run: bin/doctest --force-colors
# -------------------- Test with mpmath master ------------------- #
tests-mpmath-master:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
name: mpmath-master Tests
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install git+https://github.com/mpmath/mpmath.git@master
- run: pip install -r requirements-dev.txt
- run: pytest -n auto
# -------------------- Build the html/latex docs ----------------- #
sphinx:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: doc/aptinstall.sh
- run: pip install -r doc/requirements.txt
- run: bin/test_sphinx.sh
# When run against master, deploy to docs.sympy.org/dev. This requires
# having an SSH deploy key set up. See
# https://github.com/marketplace/actions/deploy-to-github-pages#using-an-ssh-deploy-key-
- name: Deploy
uses: JamesIves/github-pages-deploy-action@v4
if: ${{ github.ref == 'refs/heads/master' }}
with:
folder: doc/_build/html
ssh-key: ${{ secrets.DEPLOY_KEY }}
repository-name: sympy/sympy_doc
target-folder: dev
# -------------------- Check the error message under py2 --------- #
py2-import:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 'pypy2.7'
- run: bin/test_py2_import.py
# -------------------- Check the list of files for sdist --------- #
sdist-check:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip build
- run: python -m build --sdist
- run: release/compare_tar_against_git.py dist/*.tar.gz .
# -------- Run benchmarks against master and previous release ---- #
benchmarks:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
with:
# Checkout repo with full history
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: pip install asv virtualenv packaging
- run: git submodule add https://github.com/sympy/sympy_benchmarks.git
# Need to make sure we can access the branches from the main repo. We
# will run benchmarks for the PR, for master and for the previous
# release. The version branch names below should be updated once there
# has been a newer release of sympy. The list of branches to check is
# also specified in asv.conf.actions.json which should be updated as
# well.
- run: git remote add upstream https://github.com/sympy/sympy.git
- run: git fetch upstream master
- run: git fetch upstream 1.13
- name: Configure benchmarks
run: asv machine --yes --config asv.conf.actions.json
# This is the slow part:
- name: Run benchmarks
run: asv run --config asv.conf.actions.json
# Output benchmark results
- run: asv compare upstream/master HEAD --config asv.conf.actions.json --factor 1.5 | tee pr_vs_master.txt
- run: asv compare upstream/master HEAD --config asv.conf.actions.json --factor 1.5 --only-changed | tee pr_vs_master_changed.txt
- run: asv compare upstream/1.13 upstream/master --config asv.conf.actions.json --factor 1.5 | tee master_vs_release.txt
- run: asv compare upstream/1.13 upstream/master --config asv.conf.actions.json --factor 1.5 --only-changed | tee master_vs_release_changed.txt
# we save all outputs as artifacts that can be downloaded from the
# GitHub Actions summary page.
- name: Upload results as artifacts
uses: actions/upload-artifact@v4
with:
name: benchmarks
path: |
pr_vs_master.txt
pr_vs_master_changed.txt
master_vs_release.txt
master_vs_release_changed.txt