Add files via upload #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ------------------------------------------------------------------ # | |
# # | |
# 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 flake8 on the sympy package | |
run: flake8 sympy | |
- name: Run Ruff on the sympy package | |
run: ruff check . | |
- 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 | |
# -- 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 | |
matrix: | |
group: [1, 2, 3, 4] | |
name: Tests ${{ matrix.group }}/4 | |
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: bin/test --split ${{ matrix.group }}/4 | |
# -------------------- 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.*' \ | |
# | |
# Not available in CPython 3.12 (yet). | |
- if: ${{ ! contains(matrix.python-version, '3.12') }} | |
run: pip install llvmlite numba gmpy2 symengine pymc | |
# 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 | |
# -------------------- 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/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 | |
# -------------------- 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 | |
matrix: | |
group: [1, 2, 3, 4] | |
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: bin/test --slow --timeout 595 --split ${{ matrix.group }}/4 | |
# -------------------- 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'] | |
group: [1, 2, 3, 4] | |
name: ${{ matrix.python-version }} ${{ matrix.group }}/4 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: bin/test --split ${{ matrix.group }}/4 | |
# -------------------- 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 | |
# -------------------- 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 |