Skip to content

Merge pull request #26550 from oscarbenjamin/pr_pin_flint #19685

Merge pull request #26550 from oscarbenjamin/pr_pin_flint

Merge pull request #26550 from oscarbenjamin/pr_pin_flint #19685

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@v3
- uses: actions/setup-python@v4
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 .
- 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@v3
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
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@v3
with:
# Clone full git history (needed for detecting authors)
fetch-depth: 0
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
with:
python-version: '3.12'
- run: python -m pip install --upgrade pip
- run: pip install mpmath
- run: bin/doctest --force-colors
- run: examples/all.py -q
# ------------------------- Test latest Python ------------------- #
tests-latest:
needs: code-quality
runs-on: ubuntu-20.04
strategy:
fail-fast: false
name: Tests
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
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.*' \
#
- run: pip install symengine
# Not available in CPython 3.12 (yet).
- if: ${{ ! contains(matrix.python-version, '3.12') }}
run: pip install numba pymc gmpy2 llvmlite
# 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
# -------------------- NumPy 2.0 job ----------------------------- #
numpy-prerelease:
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 }} NumPy Prerelease
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: pip install -r requirements-dev.txt
- run: pip install --pre numpy scipy
# Test modules with specific dependencies
- run: bin/test_optional_dependencies.py
# -------------------- NumPy nightly ----------------------------- #
numpy-nightly:
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 }} NumPy nightly
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: pip install -r requirements-dev.txt
- run: pip install -i https://pypi.anaconda.org/scientific-python-nightly-wheels/simple numpy
- run: pip install -i https://pypi.anaconda.org/scientific-python-nightly-wheels/simple scipy
# Test modules with specific dependencies
- run: bin/test_optional_dependencies.py
# -------------------- FLINT tests -------------------------------- #
python-flint:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
# python-flint is not yet available for Python 3.12
# https://github.com/flintlib/python-flint/issues/52
python-version: '3.11'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pip install python-flint
# Test the modules that most directly use python-flint
- run: >-
pytest
sympy/crypto
sympy/integrals
sympy/holonomic
sympy/matrices
sympy/ntheory
sympy/polys
sympy/solvers
env:
SYMPY_GROUND_TYPES: flint
- run: >-
bin/doctest
sympy/integrals
sympy/holonomic
sympy/matrices
sympy/ntheory
sympy/polys
sympy/printing
doc/src/modules/integrals
doc/src/modules/holonomic
doc/src/modules/matrices
doc/src/modules/ntheory.rst
doc/src/modules/polys
doc/src/modules/printing.rst
doc/src/tutorials/intro-tutorial/
env:
SYMPY_GROUND_TYPES: flint
# -------------------- FLINT+gmpy2 ------------------------------ #
flint-gmpy2:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: python -m pip install --upgrade pip
- run: pip install -r requirements-dev.txt
- run: pip install python-flint gmpy2
# Test the modules that most directly use python-flint
- run: pytest sympy/polys sympy/ntheory sympy/matrices
env:
SYMPY_GROUND_TYPES: flint
- run: bin/doctest \
sympy/integrals \
sympy/holonomic \
sympy/matrices \
sympy/ntheory \
sympy/polys \
sympy/printing \
doc/src/modules/integrals \
doc/src/modules/holonomic \
doc/src/modules/matrices \
doc/src/modules/ntheory.rst \
doc/src/modules/polys \
doc/src/modules/printing.rst \
doc/src/tutorials/intro-tutorial/ \
env:
SYMPY_GROUND_TYPES: flint
# -------------------- Tensorflow tests -------------------------- #
tensorflow:
needs: code-quality
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
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
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- run: python -m pip install --upgrade pip
- run: pip install mpmath
- run: bin/doctest --force-colors
- run: examples/all.py -q
# -------------------- Test with mpmath master ------------------- #
tests-mpmath-master:
needs: [doctests-latest, tests-latest]
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
group: [1, 2, 3, 4]
name: mpmath-master ${{ matrix.group }}/4 Tests
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
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@v3
- uses: actions/setup-python@v4
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@v3
with:
# Checkout repo with full history
fetch-depth: 0
- uses: actions/setup-python@v4
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.12
- 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.12 upstream/master --config asv.conf.actions.json --factor 1.5 | tee master_vs_release.txt
- run: asv compare upstream/1.12 upstream/master --config asv.conf.actions.json --factor 1.5 --only-changed | tee master_vs_release_changed.txt
# This workflow does not have write permissions for the repository so
# we save all outputs as artifacts that can be accessed by the
# comment-on-pr workflow which is triggered by workflow_run to run when
# this one completes.
- name: Upload results as artifacts
uses: actions/upload-artifact@v3
with:
name: benchmarks
path: |
pr_vs_master.txt
pr_vs_master_changed.txt
master_vs_release.txt
master_vs_release_changed.txt
# -------------------- Save PR number ---------------------------- #
save-pr-number:
needs: [doctests-latest, tests-latest]
# The comment-on-pr workflow needs the issue number of the PR to be able to
# comment so we output that to a file and pass it over as an artifact.
runs-on: ubuntu-20.04
steps:
- name: Write PR number to file
if: ${{ github.event_name == 'pull_request' }}
run: echo -n ${{ github.event.number }} > pr_number.txt
- name: Write empty file for PR number
if: ${{ github.event_name != 'pull_request' }}
run: echo -n > pr_number.txt
- name: Upload results as artifacts
uses: actions/upload-artifact@v3
with:
name: pr_number
path: pr_number.txt