[tox] isolated_build = true skip_missing_interpreters = true env_list = py312, py313, py311, coverage, docs, package_description fix_lint, hypothesis, khmer, khmer_master min_version = 3.27 [testenv] description = run the tests with pytest under {basepython} deps = pip>=19.3.1 extras = storage test commands = pytest \ --cov "{envsitepackagesdir}/sourmash" \ --cov-config "{toxinidir}/tox.ini" \ --cov-report= \ --junitxml {toxworkdir}/junit.{envname}.xml \ {posargs:doc tests} package = wheel pass_env = TOXENV CURL_CA_BUNDLE http_proxy https_proxy no_proxy REQUESTS_CA_BUNDLE SSL_CERT_FILE PYTEST_* PIP_CACHE_DIR CI PYTHONDEVMODE PYTHONTRACEMALLOC LIBCLANG_PATH BINDGEN_EXTRA_CLANG_ARGS NIX_LD set_env = PIP_DISABLE_VERSION_CHECK = 1 COVERAGE_FILE = {env:COVERAGE_FILE:{toxworkdir}/.coverage.{envname}} VIRTUALENV_NO_DOWNLOAD = 1 PIP_EXTRA_INDEX_URL = https://antocuni.github.io/pypy-wheels/manylinux2010 wheel_build_env = .pkg [testenv:.pkg] pass_env = LIBCLANG_PATH BINDGEN_EXTRA_CLANG_ARGS NIX_* [testenv:pypy3] deps = pip>=19.3.1 psutil<=5.6.7 [testenv:hypothesis] commands = pytest \ --cov "{envsitepackagesdir}/sourmash" \ --cov-config "{toxinidir}/tox.ini" \ --cov-report= \ --junitxml {toxworkdir}/junit.{envname}.xml \ --run-hypothesis \ --hypothesis-show-statistics \ --hypothesis-profile ci \ {posargs:doc tests} [testenv:khmer] basepython = python3.11 deps = khmer commands = pytest \ --cov "{envsitepackagesdir}/sourmash" \ --cov-config "{toxinidir}/tox.ini" \ --cov-report= \ --junitxml {toxworkdir}/junit.{envname}.xml \ -k test_nodegraph \ {posargs:doc tests} [testenv:khmer_master] basepython = python3.11 deps = git+https://github.com/dib-lab/khmer.git\#egg commands = pytest \ --cov "{envsitepackagesdir}/sourmash" \ --cov-config "{toxinidir}/tox.ini" \ --cov-report= \ --junitxml {toxworkdir}/junit.{envname}.xml \ -k test_nodegraph \ {posargs:doc tests} [testenv:asv] description = run asv for benchmarking (compare current commit with latest) deps = asv==0.6.2 virtualenv changedir = {toxinidir} commands = asv machine --yes asv continuous latest HEAD {posargs} [testenv:docs] description = invoke sphinx-build to build the HTML docs basepython = python3.11 extras = doc commands = sphinx-build -d "{toxworkdir}/docs_doctree" doc "{toxworkdir}/docs_out" --color -bhtml {posargs} python -c 'import pathlib; print("documentation available under file://\{0\}".format(pathlib.Path(r"{toxworkdir}") / "docs_out" / "index.html"))' allowlist_externals = pandoc change_dir = {toxinidir} pass_env = HOME LC_ALL LOCALE_* [testenv:package_description] description = check that the long description is valid basepython = python3.11 skip_install = true deps = pip>=19.1 readme-renderer[md]>=24 twine>=1.12.1 extras = commands = pip wheel -w {envtmpdir}/build --no-deps . twine check {envtmpdir}/build/* change_dir = {toxinidir} [testenv:mypy] description = run mypy checker basepython = python3.11 deps = mypy commands = mypy src/sourmash pass_env = {[testenv]pass_env} PROGRAMDATA [testenv:fix_lint] description = format the code base to adhere to our styles, and complain about what we cannot do automatically basepython = python3.11 skip_install = true deps = pre-commit>=2 extras = lint commands = pre-commit run --all-files --show-diff-on-failure {posargs} python -c 'import pathlib; print("hint: run \{\} install to add checks as pre-commit hook".format(pathlib.Path(r"{envdir}") / "bin" / "pre-commit"))' pass_env = {[testenv]pass_env} PROGRAMDATA PRE_COMMIT_HOME [testenv:coverage] description = [run locally after tests]: combine coverage data and create report; generates a diff coverage against origin/latest (can be changed by setting DIFF_AGAINST env var) skip_install = true deps = {[testenv]deps} coverage>=5.0.1 diff_cover parallel_show_output = true commands = coverage combine coverage report -i -m coverage xml -i -o {toxworkdir}/coverage.xml coverage html -i -d {toxworkdir}/htmlcov diff-cover --compare-branch {env:DIFF_AGAINST:origin/latest} {toxworkdir}/coverage.xml depends = py313, py312, py311, pypy3 pass_env = {[testenv]pass_env} DIFF_AGAINST set_env = COVERAGE_FILE={toxworkdir}/.coverage [testenv:X] description = print the positional arguments passed in with echo commands = echo {posargs} [testenv:dev] description = dev environment with all deps at {envdir} usedevelop = true deps = {[testenv]deps} extras = doc storage test commands = python -m pip list --format=columns python -c "print(r'{envpython}')" [coverage:run] branch = true parallel = true [coverage:report] skip_covered = True show_missing = True exclude_lines = \#\s*pragma: no cover ^\s*raise AssertionError\b ^\s*raise NotImplementedError\b ^\s*return NotImplemented\b ^\s*raise$ ^if __name__ == ['"]__main__['"]:$ [coverage:paths] source = src/sourmash/ tests/ */.tox/*/lib/python*/site-packages/sourmash */.tox/pypy*/site-packages/sourmash */.tox\*\Lib\site-packages\sourmash */src/sourmash *\src\sourmash */tests *\tests [gh-actions] python = 3.11: py311, docs, package_description, coverage 3.12: py312, coverage 3.13: py313, coverage [flake8] max-complexity = 22 max-line-length = 99 ignore = E203, W503, C901, E402, B011 [pep8] max-line-length = 99