From 1e820b42021c2ba56a196d4d0167f3d2eb0994ee Mon Sep 17 00:00:00 2001 From: sfmig <33267254+sfmig@users.noreply.github.com> Date: Fri, 5 Jul 2024 17:03:41 +0100 Subject: [PATCH] Initial commit from cookiecutter --- .github/workflows/test_and_deploy.yml | 61 ++++++++++++++ .gitignore | 83 ++++++++++++++++++ .pre-commit-config.yaml | 43 ++++++++++ LICENSE | 28 +++++++ MANIFEST.in | 8 ++ README.md | 1 + pyproject.toml | 116 ++++++++++++++++++++++++++ sleap_sweep/__init__.py | 7 ++ tests/__init__.py | 0 tests/test_integration/__init__.py | 0 tests/test_unit/__init__.py | 0 tests/test_unit/test_placeholder.py | 2 + 12 files changed, 349 insertions(+) create mode 100644 .github/workflows/test_and_deploy.yml create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 LICENSE create mode 100644 MANIFEST.in create mode 100644 README.md create mode 100644 pyproject.toml create mode 100644 sleap_sweep/__init__.py create mode 100644 tests/__init__.py create mode 100644 tests/test_integration/__init__.py create mode 100644 tests/test_unit/__init__.py create mode 100644 tests/test_unit/test_placeholder.py diff --git a/.github/workflows/test_and_deploy.yml b/.github/workflows/test_and_deploy.yml new file mode 100644 index 0000000..279ef85 --- /dev/null +++ b/.github/workflows/test_and_deploy.yml @@ -0,0 +1,61 @@ +name: tests + +on: + push: + branches: + - '*' + tags: + - '*' + pull_request: + +jobs: + linting: + runs-on: ubuntu-latest + steps: + - uses: neuroinformatics-unit/actions/lint@v2 + + manifest: + name: Check Manifest + runs-on: ubuntu-latest + steps: + - uses: neuroinformatics-unit/actions/check_manifest@v2 + + test: + needs: [linting, manifest] + name: ${{ matrix.os }} py${{ matrix.python-version }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + # Run all supported Python versions on linux + python-version: ["3.9", "3.10", "3.11"] + os: [ubuntu-latest] + # Include one windows and macos run + include: + - os: macos-latest + python-version: "3.10" + - os: windows-latest + python-version: "3.10" + + steps: + # Run tests + - uses: neuroinformatics-unit/actions/test@v2 + with: + python-version: ${{ matrix.python-version }} + + build_sdist_wheels: + name: Build source distribution + needs: [test] + if: github.event_name == 'push' && github.ref_type == 'tag' + runs-on: ubuntu-latest + steps: + - uses: neuroinformatics-unit/actions/build_sdist_wheels@v2 + + + upload_all: + name: Publish build distributions + needs: [build_sdist_wheels] + runs-on: ubuntu-latest + steps: + - uses: neuroinformatics-unit/actions/upload_pypi@v2 + with: + secret-pypi-key: ${{ secrets.TWINE_API_KEY }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aedc8d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,83 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask instance folder +instance/ + +# Sphinx documentation +docs/_build/ + +# MkDocs documentation +/site/ + +# PyBuilder +target/ + +# Pycharm and VSCode +.idea/ +venv/ +.vscode/ + +# IPython Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# OS +.DS_Store + +# written by setuptools_scm +**/_version.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..ddecb7e --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,43 @@ + + +# Configuring https://pre-commit.ci/ +ci: + autoupdate_schedule: monthly + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: check-docstring-first + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: check-toml + - id: end-of-file-fixer + - id: mixed-line-ending + args: [--fix=lf] + - id: requirements-txt-fixer + - id: trailing-whitespace + - repo: https://github.com/charliermarsh/ruff-pre-commit + rev: v0.5.0 + hooks: + - id: ruff + - id: ruff-format + - repo: https://github.com/pre-commit/mirrors-mypy + rev: v1.10.1 + hooks: + - id: mypy + additional_dependencies: + - types-setuptools + - repo: https://github.com/mgedmin/check-manifest + rev: "0.49" + hooks: + - id: check-manifest + args: [--no-build-isolation] + additional_dependencies: [setuptools-scm] + - repo: https://github.com/codespell-project/codespell + # Configuration for codespell is in pyproject.toml + rev: v2.3.0 + hooks: + - id: codespell + additional_dependencies: + - tomli diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5e3ca3a --- /dev/null +++ b/LICENSE @@ -0,0 +1,28 @@ + +Copyright (c) 2024, Sofia Minano +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of sleap-sweep nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..e16ea33 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,8 @@ +include LICENSE +include README.md +exclude .pre-commit-config.yaml + +recursive-exclude * __pycache__ +recursive-exclude * *.py[co] +recursive-exclude docs * +recursive-exclude tests * diff --git a/README.md b/README.md new file mode 100644 index 0000000..a748430 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# sleap-sweep diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..6084db8 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,116 @@ +[project] +name = "sleap-sweep" +authors = [{name = "Sofia Minano", email= "yourname@example.com"}] +description = "Hyperparameter sweep for SLEAP" +readme = "README.md" +requires-python = ">=3.9.0" +dynamic = ["version"] + +dependencies = [] + +license = {text = "BSD-3-Clause"} + +classifiers = [ + "Development Status :: 2 - Pre-Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Operating System :: OS Independent", + "License :: OSI Approved :: BSD License", +] + +[project.urls] +"Homepage" = "https://github.com/sfmig/sleap-sweep" +"Bug Tracker" = "https://github.com/sfmig/sleap-sweep/issues" +"Documentation" = "https://github.com/sfmig/sleap-sweep" +"Source Code" = "https://github.com/sfmig/sleap-sweep" +"User Support" = "https://github.com/sfmig/sleap-sweep/issues" + +[project.optional-dependencies] +dev = [ + "pytest", + "pytest-cov", + "coverage", + "tox", + "mypy", + "pre-commit", + "ruff", + "setuptools_scm", +] + +[build-system] +requires = [ + "setuptools>=45", + "wheel", + "setuptools_scm[toml]>=6.2", +] +build-backend = "setuptools.build_meta" + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +include = ["sleap_sweep*"] +exclude = ["tests*"] + +[tool.pytest.ini_options] +addopts = "--cov=sleap_sweep" +filterwarnings = [ + "error", +] + +[tool.setuptools_scm] + +[tool.check-manifest] +ignore = [ + ".yaml", + "tox.ini", + "tests/", + "tests/test_unit/", + "tests/test_integration/", +] + +[tool.ruff] +line-length = 79 +exclude = ["__init__.py", "build", ".eggs"] +lint.select = [ + "E", # pycodestyle errors + "F", # Pyflakes + "I", # isort + # You can see what all the rules do here: https://docs.astral.sh/ruff/rules/ + # Some additional ruff rules that might be useful (uncomment to enable) + #"UP", # pyupgrade + #"B", # flake8 bugbear + #"SIM", # flake8 simplify + #"C90", # McCabe complexity +] +fix = true + +[tool.ruff.format] +docstring-code-format = true # Also format code in docstrings (e.g. examples) + +[tool.tox] +legacy_tox_ini = """ +[tox] +envlist = py{39,310,311} +isolated_build = True + +[gh-actions] +python = + 3.9: py39 + 3.10: py310 + 3.11: py311 + +[testenv] +extras = + dev +commands = + pytest -v --color=yes --cov=sleap_sweep --cov-report=xml +""" + + +[tool.codespell] +skip = '.git' +check-hidden = true diff --git a/sleap_sweep/__init__.py b/sleap_sweep/__init__.py new file mode 100644 index 0000000..06543a6 --- /dev/null +++ b/sleap_sweep/__init__.py @@ -0,0 +1,7 @@ +from importlib.metadata import PackageNotFoundError, version + +try: + __version__ = version("sleap-sweep") +except PackageNotFoundError: + # package is not installed + pass diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_integration/__init__.py b/tests/test_integration/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_unit/__init__.py b/tests/test_unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_unit/test_placeholder.py b/tests/test_unit/test_placeholder.py new file mode 100644 index 0000000..3ada1ee --- /dev/null +++ b/tests/test_unit/test_placeholder.py @@ -0,0 +1,2 @@ +def test_placeholder(): + assert True