accepting the s attribute, but with a warning. #53
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@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 |