envlist = doctest, coverage, startuptime, pycodestyle-minimal, relint, codespell, rst
skipsdist = true
requires =
tox>=3.18
tox<4.14.1
passenv =
HOME
setenv =
SAGE={toxinidir}/../sage
envdir={toxworkdir}/sagedirect
allowlist_externals =
{env:SAGE}
description =
run the Sage doctester (same as "sage -t")
passenv = {[sagedirect]passenv}
setenv = {[sagedirect]setenv}
envdir = {[sagedirect]envdir}
allowlist_externals = {[sagedirect]allowlist_externals}
commands =
{env:SAGE} -t -p 0 {posargs:--all}
description =
run the Sage doctester with Coverage.py
passenv = {[sagedirect]passenv}
setenv = {[sagedirect]setenv}
envdir = {[sagedirect]envdir}
allowlist_externals = {[sagedirect]allowlist_externals}
commands_pre =
{env:SAGE} -pip install -U coverage
commands =
{env:SAGE} --python -m coverage run "{toxinidir}/../venv/bin/sage-runtests" -p 0 {posargs:--all}
commands_post =
{env:SAGE} --python -m coverage combine
{env:SAGE} --python -m coverage report
description =
run the Sage doctester with Coverage.py, generate HTML report
passenv = {[sagedirect]passenv}
setenv = {[sagedirect]setenv}
envdir = {[sagedirect]envdir}
allowlist_externals = {[sagedirect]allowlist_externals}
commands_pre =
{env:SAGE} -pip install -U coverage
commands =
{env:SAGE} --python -m coverage run "{toxinidir}/../venv/bin/sage-runtests" -p 0 {posargs:--all}
commands_post =
{env:SAGE} --python -m coverage combine
{env:SAGE} --python -m coverage report
{env:SAGE} --python -m coverage html -d "{envdir}"
description =
run the Sage doctester with Coverage.py, generate XML report
passenv = {[sagedirect]passenv}
setenv = {[sagedirect]setenv}
envdir = {[sagedirect]envdir}
allowlist_externals = {[sagedirect]allowlist_externals}
commands_pre =
{env:SAGE} -pip install -U coverage
commands =
{env:SAGE} --python -m coverage run "{toxinidir}/../venv/bin/sage-runtests" -p 0 {posargs:--all}
commands_post =
{env:SAGE} --python -m coverage combine
{env:SAGE} --python -m coverage report
{env:SAGE} --python -m coverage xml -o "{envdir}/coverage.xml"
description =
give information about doctest coverage of files
(same as "sage --coverage[all]")
passenv = {[sagedirect]passenv}
setenv = {[sagedirect]setenv}
envdir = {[sagedirect]envdir}
allowlist_externals = {[sagedirect]allowlist_externals}
commands =
{env:SAGE} --coverage {posargs:--all}
description =
display how long each component of Sage takes to start up
(same as "sage --startuptime")
passenv = {[sagedirect]passenv}
setenv = {[sagedirect]setenv}
envdir = {[sagedirect]envdir}
allowlist_externals = {[sagedirect]allowlist_externals}
commands =
{env:SAGE} --startuptime {posargs}
description =
run the static typing checker pyright
deps = pyright
setenv =
{[sagedirect]setenv}
HOME={envdir}
PYRIGHT_PYTHON_FORCE_VERSION=1.1.232
allowlist_externals = {[sagedirect]allowlist_externals}
commands =
{env:SAGE} -sh -c 'pyright {posargs:{toxinidir}/sage/combinat {toxinidir}/sage/manifolds}'
description =
check against the Python style conventions of PEP8
deps = pycodestyle
commands = pycodestyle {posargs:{toxinidir}/sage/}
description =
check against Sage minimal style conventions
deps = pycodestyle
commands =
pycodestyle --select E111,E115,E21,E221,E222,E225,E227,E228,E25,E271,E272,E275,E302,E303,E305,E306,E401,E502,E701,E702,E703,E71,E72,W291,W293,W391,W605 {posargs:{toxinidir}/sage/}
pycodestyle --select E111,E222,E271,E301,E302,E303,E305,E306,E401,E502,E703,E712,E713,E714,E72,W29,W391,W605, --filename *.pyx {posargs:{toxinidir}/sage/}
max-line-length = 160
statistics = True
description =
check whether some forbidden patterns appear
deps = relint
allowlist_externals = find
commands = find {posargs:{toxinidir}/sage/} \
-name "*\#*" -prune -o \
-name "*.a" -prune -o \
-name "*.bak" -prune -o \
-name "*.bz2" -prune -o \
-name "*.dia" -prune -o \
-name "*.gz" -prune -o \
-name "*.ico" -prune -o \
-name "*.inv" -prune -o \
-name "*.JPEG" -prune -o \
-name "*.jpeg" -prune -o \
-name "*.JPG" -prune -o \
-name "*.jpg" -prune -o \
-name "*.log" -prune -o \
-name "*.o" -prune -o \
-name "*.orig" -prune -o \
-name "*.PDF" -prune -o \
-name "*.pdf" -prune -o \
-name "*.PNG" -prune -o \
-name "*.png" -prune -o \
-name "*.pyc" -prune -o \
-name "*.so" -prune -o \
-name "*.sobj" -prune -o \
-name "*.sws" -prune -o \
-name "*.tar" -prune -o \
-name "*.tgz" -prune -o \
-name "*.xz" -prune -o \
-name "*.zip" -prune -o \
-name "*~*" -prune -o \
-name ".DS_Store" -prune -o \
-exec relint -c {toxinidir}/.relint.yml \{\} +
description =
check for misspelled words in source code
deps = codespell
commands = codespell \
--skip="*\#*,*.a,*.bak,*.bz2,*.dia,*.gz,*.ico,*.inv,*.JPEG,*.jpeg" \
--skip="*.JPG,*.jpg,*.log,*.o,*.orig,*.PDF,*.pdf,*.PNG,*.png,*.pyc" \
--skip="*.so,*.sobj,*.sws,*.tar,*.tgz,*.xz,*.zip,*~*,.DS_Store" \
--skip="doc/ca,doc/de,doc/es,doc/fr,doc/hu,doc/it,doc/ja,doc/pt,doc/ru,doc/tr" \
--skip="src/doc/ca,src/doc/de,src/doc/es,src/doc/fr,src/doc/hu" \
--skip="src/doc/it,src/doc/ja,src/doc/pt,src/doc/ru,src/doc/tr" \
--skip=".git,.tox,autom4te.cache,cythonized,dist,lib.*,local" \
--skip="logs,scripts-3,tmp,upstream,worktree*,*.egg-info" \
--dictionary=- \
--dictionary={toxinidir}/.codespell-dictionary.txt \
--ignore-words={toxinidir}/.codespell-ignore.txt \
{posargs:{toxinidir}/sage/}
description =
validate Python docstrings markup as reStructuredText
deps = flake8-rst-docstrings
commands = flake8 --select=RST {posargs:{toxinidir}/sage/}
description =
check Cython files for code style
deps = cython-lint
commands = cython-lint --no-pycodestyle {posargs:{toxinidir}/sage/}
rst-roles =
doc,
file,
ref,
envvar,
attr,
class,
const,
data,
exc,
func,
kbd,
meth,
mod,
obj,
arxiv,
doi,
mathscinet,
oeis,
pari,
python,
issue,
wikipedia,
common_lisp,
ecl,
gap,
gap_package,
giac_cascmd,
giac_us,
maxima,
meson,
polymake,
ppl,
qepcad,
scip,
singular,
soplex
rst-directives =
attribute,
automethod,
autofunction,
toctree,
MODULEAUTHOR,
ONLY,
PLOT,
SEEALSO,
TODO
extend-ignore =
RST306
exclude =
sage/combinat/designs/database.py
sage/graphs/graph_plot.py
sage/misc/sagedoc.py
source = sage
concurrency = multiprocessing,thread
data_file = .coverage/.coverage
disable_warnings =
no-data-collected
module-not-measured
ignore_errors = True
skip_empty = True