From bec8f92c21c0bd62a3652b543c05f96d1052f8f4 Mon Sep 17 00:00:00 2001 From: getzze Date: Thu, 25 Jul 2024 12:36:15 +0100 Subject: [PATCH] use pyproject.toml with hatch use hatch environments add test_script to test plotting figures --- .coveragerc | 2 - .github/workflows/python-package.yml | 139 ++++++++++++++++++++----- .gitignore | 3 + .pre-commit-config.yaml | 19 ++++ MANIFEST.in | 2 - coverage.sh | 1 - docs/source/_static/.gitignore | 1 + docs/source/conf.py | 7 +- docs/source/setup.rst | 7 -- hatch.toml | 147 +++++++++++++++++++++++++++ make_doc.sh | 3 - pyproject.toml | 103 +++++++++++++++++++ requirements.txt | 7 -- setup.py | 41 -------- usage/.png | Bin 46757 -> 0 bytes 15 files changed, 393 insertions(+), 89 deletions(-) delete mode 100644 .coveragerc create mode 100644 .pre-commit-config.yaml delete mode 100644 MANIFEST.in delete mode 100755 coverage.sh create mode 100644 docs/source/_static/.gitignore delete mode 100644 docs/source/setup.rst create mode 100644 hatch.toml delete mode 100755 make_doc.sh create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.py delete mode 100644 usage/.png diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index 9ff8d58..0000000 --- a/.coveragerc +++ /dev/null @@ -1,2 +0,0 @@ -[run] -omit = ./doc/* diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 32e0996..8644027 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -1,7 +1,7 @@ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions -name: Python package +name: CI on: push: @@ -10,34 +10,123 @@ on: branches: [ master, dev, v0.7] jobs: - build: + check: + name: ${{ matrix.env.name }} + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + env: + - {"name": "pkg", "target": "show"} + - {"name": "lint", "target": "run"} + # - {"name": "type", "target": "run"} + - {"name": "docs", "target": "all"} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Let us have colors + run: echo "FORCE_COLOR=true" >> "$GITHUB_ENV" + - name: Install Hatch + uses: pypa/hatch@install + - name: Setup ${{ matrix.env.name }} + run: | + hatch -v env create ${{ matrix.env.name }} + hatch run ${{ matrix.env.name }}:pip freeze + - name: Run ${{ matrix.env.name }} + run: hatch -v run ${{ matrix.env.name }}:${{ matrix.env.target }} + test: + name: test py${{ matrix.python-version }} - seaborn-${{ matrix.seaborn-version }} runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: - python-version: [3.8, 3.9, '3.10', 3.11, 3.12] + # keep synchronized with hatch tests matrix + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + seaborn-version: ["0.11", "0.12", "0.13"] steps: - - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - python -m pip install flake8 coverage packaging - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with unittest - run: | - coverage run -m unittest discover tests - coverage report -m - - name: Upload Coverage to Codecov - uses: codecov/codecov-action@v4 + - name: Setup python + uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Pick environment to run + run: | + import codecs + import os + env = "tests.py{}-{}".format("${{ matrix.python-version }}", "${{ matrix.seaborn-version }}") + print(f"Environment {env}") + with codecs.open(os.environ["GITHUB_ENV"], mode="a", encoding="utf-8") as file_handler: + file_handler.write("FORCE_COLOR=1\n") + file_handler.write(f"ENV={env}\n") + shell: python + - name: Install Hatch + uses: pypa/hatch@install + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Setup python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Setup test environment + run: | + hatch -v env create ${ENV} + hatch run ${ENV}:pip freeze + shell: bash + - name: Run test suite + run: hatch -v run ${ENV}:run-cov + env: + CI_RUN: "yes" + shell: bash + - name: Upload coverage data + uses: actions/upload-artifact@v4 + with: + name: coverage-${{ matrix.python-version }}-${{ matrix.seaborn-version }} + path: "report/.coverage.*" + + coverage: + name: coverage + runs-on: ubuntu-22.04 + needs: test + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: Let us have colors + run: echo "FORCE_COLOR=true" >> "$GITHUB_ENV" + - name: Install Hatch + uses: pypa/hatch@install + - name: Setup coverage tool + run: | + hatch -v env create coverage + hatch run coverage:pip freeze + - name: Download coverage data + uses: actions/download-artifact@v4 + with: + pattern: coverage-* + path: report + merge-multiple: true + - name: Combine and report coverage + run: hatch run coverage:run + + - name: Upload HTML report + uses: actions/upload-artifact@v4 + with: + name: html-report + path: report/html + + - name: Upload Coverage to Codecov + uses: codecov/codecov-action@v4 + with: + directory: report + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.gitignore b/.gitignore index 32de0af..524db39 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,8 @@ statannot.egg-info/requires.txt statannot.egg-info/SOURCES.txt statannot.egg-info/top_level.txt +usage/figures/* +report/ + # IDE files .idea/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..d99bbae --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,19 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.3.0 + hooks: + - id: check-yaml + # - id: end-of-file-fixer + # - id: trailing-whitespace + - repo: https://github.com/abravalheri/validate-pyproject + rev: v0.18 + hooks: + - id: validate-pyproject +# - repo: https://github.com/astral-sh/ruff-pre-commit +# rev: v0.5.5 +# hooks: +# # Run the linter. +# - id: ruff +# args: [ --fix, --unsafe-fixes ] +# # Run the formatter. +# - id: ruff-format diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index a7da3fc..0000000 --- a/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -include requirements.txt -include LICENSE diff --git a/coverage.sh b/coverage.sh deleted file mode 100755 index c1419ac..0000000 --- a/coverage.sh +++ /dev/null @@ -1 +0,0 @@ -coverage run -m unittest discover tests && coverage report && coverage-badge -f -o coverage.svg \ No newline at end of file diff --git a/docs/source/_static/.gitignore b/docs/source/_static/.gitignore new file mode 100644 index 0000000..f935021 --- /dev/null +++ b/docs/source/_static/.gitignore @@ -0,0 +1 @@ +!.gitignore diff --git a/docs/source/conf.py b/docs/source/conf.py index d423ab2..9e4921f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -33,7 +33,12 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.coverage', 'sphinx_rtd_theme'] +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.coverage', + 'sphinx.ext.doctest', + 'sphinx_rtd_theme', +] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/docs/source/setup.rst b/docs/source/setup.rst deleted file mode 100644 index 552eb49..0000000 --- a/docs/source/setup.rst +++ /dev/null @@ -1,7 +0,0 @@ -setup module -============ - -.. automodule:: setup - :members: - :undoc-members: - :show-inheritance: diff --git a/hatch.toml b/hatch.toml new file mode 100644 index 0000000..4509a14 --- /dev/null +++ b/hatch.toml @@ -0,0 +1,147 @@ +# https://hatch.pypa.io/latest/config/environment/overview/ +# --------------------------------------------------------- +[envs.default] +description = "Development environment" +installer = "uv pip install" + +# --------------------------------------------------------- +[envs.pkg] +description = "package information" +[envs.pkg.scripts] +show = [ + "uv pip list --format=columns", + 'python -c "import sys; print(sys.version); print(sys.executable)"', +] + + +# --------------------------------------------------------- +[envs.lint] +template = "lint" +installer = "uv pip install" +description = "lint and format" +detached = true +dependencies = ["pre-commit"] + +[envs.lint.scripts] +run = "pre-commit run --all-files" + + +# --------------------------------------------------------- +[envs.docs] +template = "docs" +installer = "uv pip install" +description = "build and check documentation" +features = ["docs"] + +[envs.docs.scripts] +build = "sphinx-build -W --keep-going -b html docs/source docs/build" +doctest = "sphinx-build -W --keep-going -b doctest docs/source docs/build" +linkcheck = "sphinx-build -W --keep-going -b linkcheck docs/source docs/build" +all = ["build", "doctest", "linkcheck"] + + +# --------------------------------------------------------- +[envs.types] +template = "types" +installer = "uv pip install" +description = "Run the type checker" +dev-mode = false +dependencies = ["mypy"] + +[envs.types.scripts] +run = [ + """ + mypy --install-types --non-interactive --ignore-missing-imports \ + --config-file={root}/pyproject.toml {args:statannotations tests} + """, +] + + +# --------------------------------------------------------- +[envs.tests] +template = "tests" +installer = "uv pip install" +description = "Run the tests suite" +features = ["tests"] +extra-dependencies = [ + "matplotlib<3.9", + "seaborn=={matrix:seaborn_version}", +] + +[[envs.tests.matrix]] +# python = ["3.8", "3.9", "3.10", "3.11", "3.12"] +# seaborn_version = ["0.11", "0.12", "0.13"] +python = ["3.8", "3.9", "3.10", "3.11"] +seaborn_version = ["0.11"] + +[envs.tests.overrides] +matrix.seaborn_version.extra-dependencies = [ + "matplotlib<3.9", + "seaborn=={matrix:seaborn_version}", + { value = "pandas<2", if = ["0.11", "0.12"]}, + { value = "numpy<2", if = ["0.11", "0.12"]}, +] + +[envs.tests.env-vars] +COVERAGE_FILE = "report/.coverage.{matrix:python}-{matrix:seaborn_version}" +COVERAGE_PROCESS_START = "pyproject.toml" +_COVERAGE_SRC = "statannotations" + +[envs.tests.scripts] +run-cov = [ + """ + pytest --cov=statannotations \ + --cov-config=pyproject.toml --cov-context=test \ + --cov-report=term-missing:skip-covered \ + --cov-report html:report/html{matrix:python} \ + --cov-report xml:report/coverage{matrix:python}.xml \ + {args:-n auto --slow} + """, +] +run = "pytest {args:-n auto}" + + +# --------------------------------------------------------- +[envs.coverage] +template = "coverage" +installer = "uv pip install" +description = "combine coverage files" +detached = true +dependencies = [ + "coverage[toml]>=7.3", +] +env-vars = { COVERAGE_FILE = "report/.coverage" } + +[envs.coverage.scripts] +run = [ + "- coverage combine --rcfile=pyproject.toml report", + "coverage report {args:--skip-covered --show-missing}", + "coverage xml -o report/coverage.xml", + "coverage html -d report/html", +] + + +# --------------------------------------------------------- +[envs.examples] +template = "examples" +installer = "uv pip install" +description = "Run the examples" +python = "3.11" +extra-dependencies = [ + "matplotlib<3.9", + "seaborn=={matrix:seaborn_version}", +] + +[[envs.examples.matrix]] +seaborn_version = ["0.11", "0.12", "0.13"] + +[envs.examples.overrides] +matrix.seaborn_version.extra-dependencies = [ + "matplotlib<3.9", + "seaborn=={matrix:seaborn_version}", + { value = "pandas<2", if = ["0.11", "0.12"]}, + { value = "numpy<2", if = ["0.11", "0.12"]}, +] + +[envs.examples.scripts] +run = "- python usage/test_script.py {args}" diff --git a/make_doc.sh b/make_doc.sh deleted file mode 100755 index 2994014..0000000 --- a/make_doc.sh +++ /dev/null @@ -1,3 +0,0 @@ -cd docs && -# sphinx-apidoc -f -o source ../statannotations && -make html diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..448180c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,103 @@ +# https://peps.python.org/pep-0517/ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +# https://peps.python.org/pep-0621/ +[project] +name = "statannotations" +description = "add statistical significance or custom annotations on seaborn plots. Based on statannot 0.2.3" +readme = "README.md" +license = {text = "MIT License"} +requires-python = ">=3.7" +maintainers = [ + { name = "Florian Charlier", email = "trevis@cascliniques.be" }, +] +classifiers = [ + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", +] +dynamic = ["version"] +dependencies = [ + "matplotlib>=2.2.2", + "numpy>=1.12.1", + "pandas>=0.23.0", + "scipy>=1.1.0", + "seaborn>=0.9.0", +] + +[project.optional-dependencies] +extra = ["statsmodels"] +tests = [ + "statannotations[extra]", + "pytest>=6", + "pytest-cov>=4.1", + "pytest-skip-slow", + "pytest-xdist", + "packaging", + # "coverage[toml]>=7.3", +] +docs = [ + "sphinx", + "sphinx-rtd-theme", +] +dev = [ + "ipython", +] + +[project.urls] +Homepage = "https://github.com/trevismd/statannotations" + +# https://hatch.pypa.io/latest/config/metadata/ +[tool.hatch.version] +path = "statannotations/_version.py" + +[tool.hatch.build.targets.sdist] +only-include = [ + "/statannotations", + # "usage", + # "tests", + # "docs", +] + + +# https://docs.pytest.org/en/stable/reference/customize.html +[tool.pytest.ini_options] +minversion = "6.0" +testpaths = ["tests"] +addopts = "--import-mode=importlib" + + +# https://coverage.readthedocs.io/en/latest/config.html +[tool.coverage.report] +exclude_also = [ + "pragma: no.cover", + "if TYPE_CHECKING:", + "@overload", + "except ImportError", + "\\.\\.\\.", + "raise NotImplementedError()", + "if __name__ == .__main__.:", +] +show_missing = true +skip_covered = false + +[tool.coverage.run] +source = ["."] +branch = true +parallel = true +# Cannot use, it results in 'no-data-collected' +# relative_files = true + +[tool.coverage.paths] +source = [ + "statannotations", + "**/site-packages/statannotations", +] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 31019d5..0000000 --- a/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -numpy>=1.12.1 -seaborn>=0.9.0 -matplotlib>=2.2.2 -pandas>=0.23.0 -scipy>=1.1.0 -statsmodels -packaging diff --git a/setup.py b/setup.py deleted file mode 100644 index 58ac68e..0000000 --- a/setup.py +++ /dev/null @@ -1,41 +0,0 @@ -from setuptools import find_packages, setup -import re - -with open("README.md", "r") as f: - long_description = f.read() - -VERSIONFILE = "statannotations/_version.py" -verstrline = open(VERSIONFILE, "rt").read() -match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", verstrline, re.M) -if match: - version = match.group(1) -else: - raise RuntimeError("Unable to find version string in %s." % (VERSIONFILE,)) - - -def remove_dev_only(list_of_dependencies): - return [dep for dep in list_of_dependencies - if dep.strip() not in ("statsmodels", "packaging")] - - -setup( - name="statannotations", - version=version, - maintainer="Florian Charlier", - maintainer_email="trevis@cascliniques.be", - description=("add statistical significance or custom annotations on " - "seaborn plots. Based on statannot 0.2.3"), - license="MIT License", - license_file="LICENSE", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/trevismd/statannotations", - packages=find_packages(exclude=("tests", "usage", "docs", "build", "dist")), - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - ], - install_requires=remove_dev_only(open("requirements.txt").readlines()), - python_requires='>=3.6', -) diff --git a/usage/.png b/usage/.png deleted file mode 100644 index 9bfb18ed8f1ffcd4382a840dceb5a368038fdc56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46757 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 Ck^`y$