diff --git a/.bumpversion.cfg b/.bumpversion.cfg deleted file mode 100644 index fdba9e4..0000000 --- a/.bumpversion.cfg +++ /dev/null @@ -1,8 +0,0 @@ -[bumpversion] -current_version = 0.0.1 -tag = True -commit = True - -[bumpversion:file:./pyproject.toml] -search = version = "{current_version}" -replace = version = "{new_version}" diff --git a/.codecov.yaml b/.codecov.yaml index 829e56c..d0c0e29 100644 --- a/.codecov.yaml +++ b/.codecov.yaml @@ -1,17 +1,17 @@ # Based on pydata/xarray codecov: - require_ci_to_pass: no + require_ci_to_pass: no coverage: - status: - project: - default: - # Require 1% coverage, i.e., always succeed - target: 1 - patch: false - changes: false + status: + project: + default: + # Require 1% coverage, i.e., always succeed + target: 1 + patch: false + changes: false comment: - layout: diff, flags, files - behavior: once - require_base: no + layout: diff, flags, files + behavior: once + require_base: no diff --git a/.cruft.json b/.cruft.json index 3ad4cf1..13c94e5 100644 --- a/.cruft.json +++ b/.cruft.json @@ -1,23 +1,28 @@ { - "template": "https://github.com/scverse/cookiecutter-scverse", - "commit": "5f091ed0952e4adac0c95bda4006bec0b4532995", - "checkout": null, - "context": { - "cookiecutter": { - "project_name": "genomic-features", - "package_name": "genomic_features", - "project_description": "Genomic annotations using BioConductor resources in Python.", - "author_full_name": "Isaac Virshup", - "author_email": "ivirshup@gmail.com", - "github_user": "ivirshup", - "project_repo": "https://github.com/scverse/genomic-features", - "license": "BSD 3-Clause License", - "_copy_without_render": [ - ".github/workflows/**.yaml", - "docs/_templates/autosummary/**.rst" - ], - "_template": "https://github.com/scverse/cookiecutter-scverse" - } - }, - "directory": null + "template": "https://github.com/scverse/cookiecutter-scverse", + "commit": "8e96abb5c3e2d5078c44713958da672711cf2a48", + "checkout": "v0.3.0", + "context": { + "cookiecutter": { + "project_name": "genomic-features", + "package_name": "genomic_features", + "project_description": "Genomic annotations using BioConductor resources in Python.", + "author_full_name": "Isaac Virshup", + "author_email": "ivirshup@gmail.com", + "github_user": "ivirshup", + "project_repo": "https://github.com/scverse/genomic-features", + "license": "BSD 3-Clause License", + "_copy_without_render": [ + ".github/workflows/**.yaml", + "docs/_templates/autosummary/**.rst" + ], + "_render_devdocs": false, + "_jinja2_env_vars": { + "lstrip_blocks": true, + "trim_blocks": true + }, + "_template": "https://github.com/scverse/cookiecutter-scverse" + } + }, + "directory": null } diff --git a/.editorconfig b/.editorconfig index 2fe0ce0..050f911 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,5 +8,11 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true +[*.{yml,yaml}] +indent_size = 2 + +[.cruft.json] +indent_size = 2 + [Makefile] indent_style = tab diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 8d3ddaa..a5a20e6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -2,88 +2,88 @@ name: Bug report description: Report something that is broken or incorrect labels: bug body: - - type: markdown - attributes: - value: | - **Note**: Please read [this guide](https://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports) - detailing how to provide the necessary information for us to reproduce your bug. In brief: - * Please provide exact steps how to reproduce the bug in a clean Python environment. - * In case it's not clear what's causing this bug, please provide the data or the data generation procedure. - * Sometimes it is not possible to share the data, but usually it is possible to replicate problems on publicly - available datasets or to share a subset of your data. + - type: markdown + attributes: + value: | + **Note**: Please read [this guide](https://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports) + detailing how to provide the necessary information for us to reproduce your bug. In brief: + * Please provide exact steps how to reproduce the bug in a clean Python environment. + * In case it's not clear what's causing this bug, please provide the data or the data generation procedure. + * Sometimes it is not possible to share the data, but usually it is possible to replicate problems on publicly + available datasets or to share a subset of your data. - - type: textarea - id: report - attributes: - label: Report - description: A clear and concise description of what the bug is. - validations: - required: true + - type: textarea + id: report + attributes: + label: Report + description: A clear and concise description of what the bug is. + validations: + required: true - - type: textarea - id: versions - attributes: - label: Version information - description: | - Please paste below the output of + - type: textarea + id: versions + attributes: + label: Version information + description: | + Please paste below the output of - ```python - import session_info - session_info.show(html=False, dependencies=True) - ``` - placeholder: | - ----- - anndata 0.8.0rc2.dev27+ge524389 - session_info 1.0.0 - ----- - asttokens NA - awkward 1.8.0 - backcall 0.2.0 - cython_runtime NA - dateutil 2.8.2 - debugpy 1.6.0 - decorator 5.1.1 - entrypoints 0.4 - executing 0.8.3 - h5py 3.7.0 - ipykernel 6.15.0 - jedi 0.18.1 - mpl_toolkits NA - natsort 8.1.0 - numpy 1.22.4 - packaging 21.3 - pandas 1.4.2 - parso 0.8.3 - pexpect 4.8.0 - pickleshare 0.7.5 - pkg_resources NA - prompt_toolkit 3.0.29 - psutil 5.9.1 - ptyprocess 0.7.0 - pure_eval 0.2.2 - pydev_ipython NA - pydevconsole NA - pydevd 2.8.0 - pydevd_file_utils NA - pydevd_plugins NA - pydevd_tracing NA - pygments 2.12.0 - pytz 2022.1 - scipy 1.8.1 - setuptools 62.5.0 - setuptools_scm NA - six 1.16.0 - stack_data 0.3.0 - tornado 6.1 - traitlets 5.3.0 - wcwidth 0.2.5 - zmq 23.1.0 - ----- - IPython 8.4.0 - jupyter_client 7.3.4 - jupyter_core 4.10.0 - ----- - Python 3.9.13 | packaged by conda-forge | (main, May 27 2022, 16:58:50) [GCC 10.3.0] - Linux-5.18.6-arch1-1-x86_64-with-glibc2.35 - ----- - Session information updated at 2022-07-07 17:55 + ```python + import session_info + session_info.show(html=False, dependencies=True) + ``` + placeholder: | + ----- + anndata 0.8.0rc2.dev27+ge524389 + session_info 1.0.0 + ----- + asttokens NA + awkward 1.8.0 + backcall 0.2.0 + cython_runtime NA + dateutil 2.8.2 + debugpy 1.6.0 + decorator 5.1.1 + entrypoints 0.4 + executing 0.8.3 + h5py 3.7.0 + ipykernel 6.15.0 + jedi 0.18.1 + mpl_toolkits NA + natsort 8.1.0 + numpy 1.22.4 + packaging 21.3 + pandas 1.4.2 + parso 0.8.3 + pexpect 4.8.0 + pickleshare 0.7.5 + pkg_resources NA + prompt_toolkit 3.0.29 + psutil 5.9.1 + ptyprocess 0.7.0 + pure_eval 0.2.2 + pydev_ipython NA + pydevconsole NA + pydevd 2.8.0 + pydevd_file_utils NA + pydevd_plugins NA + pydevd_tracing NA + pygments 2.12.0 + pytz 2022.1 + scipy 1.8.1 + setuptools 62.5.0 + setuptools_scm NA + six 1.16.0 + stack_data 0.3.0 + tornado 6.1 + traitlets 5.3.0 + wcwidth 0.2.5 + zmq 23.1.0 + ----- + IPython 8.4.0 + jupyter_client 7.3.4 + jupyter_core 4.10.0 + ----- + Python 3.9.13 | packaged by conda-forge | (main, May 27 2022, 16:58:50) [GCC 10.3.0] + Linux-5.18.6-arch1-1-x86_64-with-glibc2.35 + ----- + Session information updated at 2022-07-07 17:55 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5cad625..5b62547 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - - name: Scverse Community Forum - url: https://discourse.scverse.org/ - about: If you have questions about “How to do X”, please ask them here. + - name: Scverse Community Forum + url: https://discourse.scverse.org/ + about: If you have questions about “How to do X”, please ask them here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index be51193..35f0493 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -2,10 +2,10 @@ name: Feature request description: Propose a new feature for genomic-features labels: enhancement body: - - type: textarea - id: description - attributes: - label: Description of feature - description: Please describe your suggestion for a new feature. It might help to describe a problem or use case, plus any alternatives that you have considered. - validations: - required: true + - type: textarea + id: description + attributes: + label: Description of feature + description: Please describe your suggestion for a new feature. It might help to describe a problem or use case, plus any alternatives that you have considered. + validations: + required: true diff --git a/.github/workflows/build.yaml.rej b/.github/workflows/build.yaml.rej new file mode 100644 index 0000000..9aa6687 --- /dev/null +++ b/.github/workflows/build.yaml.rej @@ -0,0 +1,53 @@ +diff a/.github/workflows/build.yaml b/.github/workflows/build.yaml (rejected hunks) +@@ -1,29 +1,29 @@ + name: Check Build + + on: +- push: +- branches: [main] +- pull_request: +- branches: [main] ++ push: ++ branches: [main] ++ pull_request: ++ branches: [main] + + concurrency: +- group: ${{ github.workflow }}-${{ github.ref }} +- cancel-in-progress: true ++ group: ${{ github.workflow }}-${{ github.ref }} ++ cancel-in-progress: true + + jobs: +- package: +- runs-on: ubuntu-latest +- steps: +- - uses: actions/checkout@v3 +- - name: Set up Python 3.10 +- uses: actions/setup-python@v4 +- with: +- python-version: "3.10" +- cache: "pip" +- cache-dependency-path: "**/pyproject.toml" +- - name: Install build dependencies +- run: python -m pip install --upgrade pip wheel twine build +- - name: Build package +- run: python -m build +- - name: Check package +- run: twine check --strict dist/*.whl ++ package: ++ runs-on: ubuntu-latest ++ steps: ++ - uses: actions/checkout@v3 ++ - name: Set up Python 3.10 ++ uses: actions/setup-python@v4 ++ with: ++ python-version: "3.10" ++ cache: "pip" ++ cache-dependency-path: "**/pyproject.toml" ++ - name: Install build dependencies ++ run: python -m pip install --upgrade pip wheel twine build ++ - name: Build package ++ run: python -m build ++ - name: Check package ++ run: twine check --strict dist/*.whl diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..bd82eb5 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,29 @@ +name: Release + +on: + release: + types: [published] + +# Use "trusted publishing", see https://docs.pypi.org/trusted-publishers/ +jobs: + release: + name: Upload release to PyPI + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/{{ cookiecutter.package_name }} + permissions: + id-token: write # IMPORTANT: this permission is mandatory for trusted publishing + steps: + - uses: actions/checkout@v4 + with: + filter: blob:none + fetch-depth: 0 + - uses: actions/setup-python@v4 + with: + python-version: "3.x" + cache: "pip" + - run: pip install build + - run: python -m build + - name: Publish package distributions to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/sync.yaml b/.github/workflows/sync.yaml deleted file mode 100644 index 36471f2..0000000 --- a/.github/workflows/sync.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: Sync Template - -on: - workflow_dispatch: - schedule: - - cron: "0 2 * * *" # every night at 2:00 UTC - -jobs: - sync: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set up Python 3.10 - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - name: Install dependencies - # for now, pin cookiecutter version, due to https://github.com/cruft/cruft/issues/166 - run: python -m pip install --upgrade cruft "cookiecutter<2" pre-commit toml - - name: Find Latest Tag - uses: oprypin/find-latest-tag@v1.1.0 - id: get-latest-tag - with: - repository: scverse/cookiecutter-scverse - releases-only: false - sort-tags: true - regex: '^v\d+\.\d+\.\d+$' # vX.X.X - - name: Sync - run: | - cruft update --checkout ${{ steps.get-latest-tag.outputs.tag }} --skip-apply-ask --project-dir . - - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 - with: - commit-message: Automated template update from cookiecutter-scverse - branch: template-update - title: Automated template update from cookiecutter-scverse - body: | - A new version of the [scverse cookiecutter template](https://github.com/scverse/cookiecutter-scverse/releases) - got released. This PR adds all new changes to your repository and helps to stay in sync with - the latest best-practice template maintained by the scverse team. - - **If a merge conflict arised, a `.rej` file with the rejected patch is generated. You'll need to - manually merge these changes.** - - For more information about the template sync, please refer to the - [template documentation](https://cookiecutter-scverse-instance.readthedocs.io/en/latest/template_usage.html#automated-template-sync). diff --git a/.github/workflows/test.yaml.rej b/.github/workflows/test.yaml.rej new file mode 100644 index 0000000..95161f8 --- /dev/null +++ b/.github/workflows/test.yaml.rej @@ -0,0 +1,113 @@ +diff a/.github/workflows/test.yaml b/.github/workflows/test.yaml (rejected hunks) +@@ -1,53 +1,67 @@ + name: Test + + on: +- push: +- branches: [main] +- pull_request: +- branches: [main] ++ push: ++ branches: [main] ++ pull_request: ++ branches: [main] ++ schedule: ++ - cron: "0 5 1,15 * *" + + concurrency: +- group: ${{ github.workflow }}-${{ github.ref }} +- cancel-in-progress: true ++ group: ${{ github.workflow }}-${{ github.ref }} ++ cancel-in-progress: true + + jobs: +- test: +- runs-on: ${{ matrix.os }} +- defaults: +- run: +- shell: bash -e {0} # -e to fail on error +- +- strategy: +- fail-fast: false +- matrix: +- python: ["3.8", "3.10"] +- os: [ubuntu-latest] ++ test: ++ runs-on: ${{ matrix.os }} ++ defaults: ++ run: ++ shell: bash -e {0} # -e to fail on error + ++ strategy: ++ fail-fast: false ++ matrix: ++ include: ++ - os: ubuntu-latest ++ python: "3.9" ++ - os: ubuntu-latest ++ python: "3.11" ++ - os: ubuntu-latest ++ python: "3.11" ++ pip-flags: "--pre" ++ name: PRE-RELEASE DEPENDENCIES ++ ++ name: ${{ matrix.name }} Python ${{ matrix.python }} ++ ++ env: ++ OS: ${{ matrix.os }} ++ PYTHON: ${{ matrix.python }} ++ ++ steps: ++ - uses: actions/checkout@v3 ++ - name: Set up Python ${{ matrix.python }} ++ uses: actions/setup-python@v4 ++ with: ++ python-version: ${{ matrix.python }} ++ cache: "pip" ++ cache-dependency-path: "**/pyproject.toml" ++ ++ - name: Install test dependencies ++ run: | ++ python -m pip install --upgrade pip wheel ++ - name: Install dependencies ++ run: | ++ pip install ${{ matrix.pip-flags }} ".[dev,test]" ++ - name: Test + env: +- OS: ${{ matrix.os }} +- PYTHON: ${{ matrix.python }} +- +- steps: +- - uses: actions/checkout@v3 +- - name: Set up Python ${{ matrix.python }} +- uses: actions/setup-python@v4 +- with: +- python-version: ${{ matrix.python }} +- cache: "pip" +- cache-dependency-path: "**/pyproject.toml" +- +- - name: Install test dependencies +- run: | +- python -m pip install --upgrade pip wheel +- - name: Install dependencies +- run: | +- pip install ".[dev,test]" +- - name: Test +- env: +- MPLBACKEND: agg +- PLATFORM: ${{ matrix.os }} +- DISPLAY: :42 +- run: | +- pytest -v --cov --color=yes +- - name: Upload coverage +- uses: codecov/codecov-action@v3 ++ MPLBACKEND: agg ++ PLATFORM: ${{ matrix.os }} ++ DISPLAY: :42 ++ run: | ++ coverage run -m pytest -v --color=yes ++ - name: Report coverage ++ run: | ++ coverage report ++ - name: Upload coverage ++ uses: codecov/codecov-action@v3 diff --git a/.pre-commit-config.yaml.rej b/.pre-commit-config.yaml.rej new file mode 100644 index 0000000..c0a8e7c --- /dev/null +++ b/.pre-commit-config.yaml.rej @@ -0,0 +1,100 @@ +diff a/.pre-commit-config.yaml b/.pre-commit-config.yaml (rejected hunks) +@@ -1,50 +1,53 @@ + fail_fast: false + default_language_version: +- python: python3 ++ python: python3 + default_stages: +- - commit +- - push ++ - commit ++ - push + minimum_pre_commit_version: 2.16.0 + repos: +- - repo: https://github.com/psf/black +- rev: "23.11.0" +- hooks: +- - id: black +- - repo: https://github.com/asottile/blacken-docs +- rev: 1.16.0 +- hooks: +- - id: blacken-docs +- - repo: https://github.com/pre-commit/mirrors-prettier +- rev: v3.1.0 +- hooks: +- - id: prettier +- # Newer versions of node don't work on systems that have an older version of GLIBC +- # (in particular Ubuntu 18.04 and Centos 7) +- # EOL of Centos 7 is in 2024-06, we can probably get rid of this then. +- # See https://github.com/scverse/cookiecutter-scverse/issues/143 and +- # https://github.com/jupyterlab/jupyterlab/issues/12675 +- language_version: "17.9.1" +- - repo: https://github.com/charliermarsh/ruff-pre-commit +- rev: v0.1.6 +- hooks: +- - id: ruff +- args: [--fix, --exit-non-zero-on-fix] +- - repo: https://github.com/pre-commit/pre-commit-hooks +- rev: v4.5.0 +- hooks: +- - id: detect-private-key +- - id: check-ast +- - id: end-of-file-fixer +- - id: mixed-line-ending +- args: [--fix=lf] +- - id: trailing-whitespace +- - id: check-case-conflict +- - repo: local +- hooks: +- - id: forbid-to-commit +- name: Don't commit rej files +- entry: | +- Cannot commit .rej files. These indicate merge conflicts that arise during automated template updates. +- Fix the merge conflicts manually and remove the .rej files. +- language: fail +- files: '.*\.rej$' ++ - repo: https://github.com/psf/black ++ rev: "23.11.0" ++ hooks: ++ - id: black ++ - repo: https://github.com/asottile/blacken-docs ++ rev: 1.16.0 ++ hooks: ++ - id: blacken-docs ++ - repo: https://github.com/pre-commit/mirrors-prettier ++ rev: v3.1.0 ++ hooks: ++ - id: prettier ++ # Newer versions of node don't work on systems that have an older version of GLIBC ++ # (in particular Ubuntu 18.04 and Centos 7) ++ # EOL of Centos 7 is in 2024-06, we can probably get rid of this then. ++ # See https://github.com/scverse/cookiecutter-scverse/issues/143 and ++ # https://github.com/jupyterlab/jupyterlab/issues/12675 ++ language_version: "17.9.1" ++ - repo: https://github.com/astral-sh/ruff-pre-commit ++ rev: v0.1.6 ++ hooks: ++ - id: ruff ++ args: [--fix, --exit-non-zero-on-fix] ++ - repo: https://github.com/pre-commit/pre-commit-hooks ++ rev: v4.5.0 ++ hooks: ++ - id: detect-private-key ++ - id: check-ast ++ - id: end-of-file-fixer ++ - id: mixed-line-ending ++ args: [--fix=lf] ++ - id: trailing-whitespace ++ - id: check-case-conflict ++ # Check that there are no merge conflicts (could be generated by template sync) ++ - id: check-merge-conflict ++ args: [--assume-in-merge] ++ - repo: local ++ hooks: ++ - id: forbid-to-commit ++ name: Don't commit rej files ++ entry: | ++ Cannot commit .rej files. These indicate merge conflicts that arise during automated template updates. ++ Fix the merge conflicts manually and remove the .rej files. ++ language: fail ++ files: '.*\.rej$' diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 9e5d5fa..69897c3 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,16 +1,16 @@ # https://docs.readthedocs.io/en/stable/config-file/v2.html version: 2 build: - os: ubuntu-20.04 - tools: - python: "3.10" + os: ubuntu-20.04 + tools: + python: "3.10" sphinx: - configuration: docs/conf.py - # disable this for more lenient docs builds - fail_on_warning: true + configuration: docs/conf.py + # disable this for more lenient docs builds + fail_on_warning: true python: - install: - - method: pip - path: . - extra_requirements: - - doc + install: + - method: pip + path: . + extra_requirements: + - doc diff --git a/README.md.rej b/README.md.rej new file mode 100644 index 0000000..9df0002 --- /dev/null +++ b/README.md.rej @@ -0,0 +1,19 @@ +diff a/README.md b/README.md (rejected hunks) +@@ -17,7 +17,7 @@ Please refer to the [documentation][link-docs]. In particular, the + + ## Installation + +-You need to have Python 3.8 or newer installed on your system. If you don't have ++You need to have Python 3.9 or newer installed on your system. If you don't have + Python installed, we recommend installing [Mambaforge](https://github.com/conda-forge/miniforge#mambaforge). + + There are several alternative options to install genomic-features: +@@ -33,7 +33,7 @@ pip install genomic-features + 1. Install the latest development version: + + ```bash +-pip install git+https://github.com/ivirshup/genomic-features.git@main ++pip install git+https://github.com/scverse/genomic-features.git@main + ``` + + ## Release notes diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css new file mode 100644 index 0000000..b8c8d47 --- /dev/null +++ b/docs/_static/css/custom.css @@ -0,0 +1,4 @@ +/* Reduce the font size in data frames - See https://github.com/scverse/cookiecutter-scverse/issues/193 */ +div.cell_output table.dataframe { + font-size: 0.8em; +} diff --git a/docs/conf.py b/docs/conf.py index 198ffd8..3ce4a85 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -110,12 +110,15 @@ # html_theme = "sphinx_book_theme" html_static_path = ["_static"] +html_css_files = ["css/custom.css"] + html_title = project_name html_theme_options = { "repository_url": repository_url, "use_repository_button": True, "path_to_docs": "docs/", + "navigation_with_keys": False, } pygments_style = "default" diff --git a/docs/conf.py.rej b/docs/conf.py.rej new file mode 100644 index 0000000..99c6a02 --- /dev/null +++ b/docs/conf.py.rej @@ -0,0 +1,28 @@ +diff a/docs/conf.py b/docs/conf.py (rejected hunks) +@@ -57,6 +57,7 @@ extensions = [ + "sphinx_autodoc_typehints", + "sphinx.ext.mathjax", + "IPython.sphinxext.ipython_console_highlighting", ++ "sphinxext.opengraph", + *[p.stem for p in (HERE / "extensions").glob("*.py")], + ] + +@@ -123,18 +127,3 @@ nitpick_ignore = [ + # you can add an exception to this list. + # ("py:class", "igraph.Graph"), + ] +- +- +-def setup(app): +- """App setup hook.""" +- app.add_config_value( +- "recommonmark_config", +- { +- "auto_toc_tree_section": "Contents", +- "enable_auto_toc_tree": True, +- "enable_math": True, +- "enable_inline_math": False, +- "enable_eval_rst": True, +- }, +- True, +- ) diff --git a/docs/contributing.md b/docs/contributing.md index eb45e7e..2484742 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -1,6 +1,6 @@ # Contributing guide -Scanpy provides extensive [developer documentation][scanpy developer guide], most of which applies to this repo, too. +Scanpy provides extensive [developer documentation][scanpy developer guide], most of which applies to this project, too. This document will not reproduce the entire content from there. Instead, it aims at summarizing the most important information to get you started on contributing. @@ -19,9 +19,8 @@ pip install -e ".[dev,test,doc]" ## Code-style -This template uses [pre-commit][] to enforce consistent code-styles. On every commit, pre-commit checks will either -automatically fix issues with the code, or raise an error message. See [pre-commit checks](template_usage.md#pre-commit-checks) for -a full list of checks enabled for this repository. +This package uses [pre-commit][] to enforce consistent code-styles. +On every commit, pre-commit checks will either automatically fix issues with the code, or raise an error message. To enable pre-commit locally, simply run @@ -43,10 +42,10 @@ git pull --rebase to integrate the changes into yours. While the [pre-commit.ci][] is useful, we strongly encourage installing and running pre-commit locally first to understand its usage. -Finally, most editors have an _autoformat on save_ feature. Consider enabling this option for [black][black-editors] +Finally, most editors have an _autoformat on save_ feature. Consider enabling this option for [ruff][ruff-editors] and [prettier][prettier-editors]. -[black-editors]: https://black.readthedocs.io/en/stable/integrations/editors.html +[ruff-editors]: https://docs.astral.sh/ruff/integrations/ [prettier-editors]: https://prettier.io/docs/en/editors.html ## Writing tests @@ -65,7 +64,17 @@ command line by executing pytest ``` -in the root of the repository. Continuous integration will automatically run the tests on all pull requests. +in the root of the repository. + +### Continuous integration + +Continuous integration will automatically run the tests on all pull requests and test +against the minimum and maximum supported Python version. + +Additionally, there's a CI job that tests against pre-releases of all dependencies +(if there are any). The purpose of this check is to detect incompatibilities +of new package versions early on and gives you time to fix the issue or reach +out to the developers of the dependency before the package is released to a wider audience. [scanpy-test-docs]: https://scanpy.readthedocs.io/en/latest/dev/testing.html#writing-tests @@ -73,7 +82,7 @@ in the root of the repository. Continuous integration will automatically run the ### Updating the version number -Before making a release, you need to update the version number. Please adhere to [Semantic Versioning][semver], in brief +Before making a release, you need to update the version number in the `pyproject.toml` file. Please adhere to [Semantic Versioning][semver], in brief > Given a version number MAJOR.MINOR.PATCH, increment the: > @@ -83,56 +92,8 @@ Before making a release, you need to update the version number. Please adhere to > > Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. -We use [bump2version][] to automatically update the version number in all places and automatically create a git tag. -Run one of the following commands in the root of the repository - -```bash -bump2version patch -bump2version minor -bump2version major -``` - -Once you are done, run - -``` -git push --tags -``` - -to publish the created tag on GitHub. - -[bump2version]: https://github.com/c4urself/bump2version - -### Building and publishing the package on PyPI - -Python packages are not distributed as source code, but as _distributions_. The most common distribution format is the so-called _wheel_. To build a _wheel_, run - -```bash -python -m build -``` - -This command creates a _source archive_ and a _wheel_, which are required for publishing your package to [PyPI][]. These files are created directly in the root of the repository. - -Before uploading them to [PyPI][] you can check that your _distribution_ is valid by running: - -```bash -twine check dist/* -``` - -and finally publishing it with: - -```bash -twine upload dist/* -``` - -Provide your username and password when requested and then go check out your package on [PyPI][]! - -For more information, follow the [Python packaging tutorial][]. - -It is possible to automate this with GitHub actions, see also [this feature request][pypi-feature-request] -in the cookiecutter-scverse template. - -[python packaging tutorial]: https://packaging.python.org/en/latest/tutorials/packaging-projects/#generating-distribution-archives -[pypi-feature-request]: https://github.com/scverse/cookiecutter-scverse/issues/88 +Once you are done, commit and push your changes and navigate to the "Releases" page of this project on GitHub. +Specify `vX.X.X` as a tag name and create a release. For more information, see [managing Github releases][]. This will automatically create a git tag and trigger a Github workflow that creates a release on PyPI. ## Writing documentation @@ -151,7 +112,7 @@ on how to write documentation. The documentation is set-up to render jupyter notebooks stored in the `docs/notebooks` directory using [myst-nb][]. Currently, only notebooks in `.ipynb` format are supported that will be included with both their input and output cells. -It is your reponsibility to update and re-run the notebook whenever necessary. +It is your responsibility to update and re-run the notebook whenever necessary. If you are interested in automatically running notebooks as part of the continuous integration, please check out [this feature request](https://github.com/scverse/cookiecutter-scverse/issues/40) in the `cookiecutter-scverse` diff --git a/docs/index.md.rej b/docs/index.md.rej new file mode 100644 index 0000000..14a8d31 --- /dev/null +++ b/docs/index.md.rej @@ -0,0 +1,9 @@ +diff a/docs/index.md b/docs/index.md (rejected hunks) +@@ -8,7 +8,6 @@ + + api.md + changelog.md +-template_usage.md + contributing.md + references.md + diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 954237b..0000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.https://www.sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "" goto help - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/pyproject.toml.rej b/pyproject.toml.rej new file mode 100644 index 0000000..3bf72e5 --- /dev/null +++ b/pyproject.toml.rej @@ -0,0 +1,63 @@ +diff a/pyproject.toml b/pyproject.toml (rejected hunks) +@@ -7,7 +7,7 @@ name = "genomic-features" + version = "0.0.1" + description = "Genomic annotations using BioConductor resources in Python." + readme = "README.md" +-requires-python = ">=3.8" ++requires-python = ">=3.9" + license = {file = "LICENSE"} + authors = [ + {name = "Isaac Virshup"}, +@@ -26,25 +26,26 @@ dependencies = [ + + [project.optional-dependencies] + dev = [ +- # CLI for bumping the version number +- "bump2version", + "pre-commit", + "twine>=4.0.2" + ] + doc = [ ++ "docutils>=0.8,!=0.18.*,!=0.19.*", + "sphinx>=4", + "sphinx-book-theme>=1.0.0", + "myst-nb", + "sphinxcontrib-bibtex>=1.0.0", + "sphinx-autodoc-typehints", ++ "sphinxext-opengraph", + # For notebooks + "ipykernel", + "ipython", + "sphinx-copybutton", ++ "pandas", + ] + test = [ + "pytest", +- "pytest-cov", ++ "coverage", + ] + + [tool.coverage.run] +@@ -62,12 +63,10 @@ addopts = [ + + [tool.black] + line-length = 120 +-target-version = ["py38"] + + [tool.ruff] + src = ["src"] + line-length = 120 +-target-version = "py38" + select = [ + "F", # Errors detected by Pyflakes + "E", # Error detected by Pycodestyle +@@ -117,9 +116,6 @@ convention = "numpy" + "tests/*" = ["D"] + "*/__init__.py" = ["F401"] + +-[tool.jupytext] +-formats = "ipynb,md" +- + [tool.cruft] + skip = [ + "tests",