Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate setup.cfg to pyproject.toml and refactor pyproject.toml #685

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
546141f
Migrate `setup.cfg` to PEP 621 Project Metadata in `pyproject.toml`
marvinpfoertner Mar 27, 2022
7df5a6d
Add URLs in `pyproject.toml` testing config
marvinpfoertner Mar 27, 2022
e7f9e58
Update `black` configuration
marvinpfoertner Mar 27, 2022
edbf194
Update `isort` configuration
marvinpfoertner Mar 27, 2022
a7e71ac
Add headers for formatting and linting configuration
marvinpfoertner Mar 27, 2022
42244be
Move formatting configuration section
marvinpfoertner Mar 27, 2022
88c7acc
Rearrange linting configuration
marvinpfoertner Mar 27, 2022
e21167f
Add maintainers and authors
marvinpfoertner Mar 27, 2022
7f4fc95
Bugfix in `tool.setuptools.platforms`
marvinpfoertner Mar 27, 2022
eeea58a
Bugfix in package collection
marvinpfoertner Mar 27, 2022
955d39c
Bugfix in `project.optional-dependencies`
marvinpfoertner Mar 27, 2022
c1056e7
Don't need requirements.txt anymore
marvinpfoertner Mar 27, 2022
3c0f9d7
One line per package dependency
marvinpfoertner Mar 27, 2022
a3d7651
Bugfix in `[project.version]`
marvinpfoertner Mar 27, 2022
cfe0a16
Remove authors and maintainers
marvinpfoertner Mar 29, 2022
4f1c0cb
Bugfix: `optional-dependencies` is generated dynamically
marvinpfoertner Mar 29, 2022
fa66639
Fix warning in build process: Add `homepage` URL
marvinpfoertner Mar 29, 2022
0cd5215
Update sphinx requirement from <4.5,>=3.0 to >=3.0,<4.6 (#688)
dependabot[bot] Mar 28, 2022
822a0cb
Resolve pylint line-too-long for linops (#682)
PrSh27 Mar 28, 2022
717e0bb
Merge remote-tracking branch 'origin/main' into pep-621-refactor
marvinpfoertner Mar 29, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 117 additions & 42 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,14 +1,82 @@
# For more information about this pyproject.toml file, see
# PEP 518: https://www.python.org/dev/peps/pep-0518/
################################################################################
# PEP 621 Project Metadata #
################################################################################

# see https://peps.python.org/pep-0621/

[project]
name = "probnum"
description = "Probabilistic Numerics in Python."
readme = "README.md"
requires-python = ">=3.8,<3.11"
license = {file = "LICENSE.txt"}
keywords = [
"probabilistic-numerics",
"machine-learning",
"numerical-methods",
]
classifiers = [
"Development Status :: 4 - Beta",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
]
dependencies = [
"numpy>=1.20", "numpy>=1.21.3; python_version>='3.10'",
"scipy>=1.4", "scipy>=1.8.0; python_version>='3.10'",
]
dynamic = [
"version",
"optional-dependencies",
]

# TODO (pypa/setuptools#3221): Optional dependencies that reference one another
# don't seem to be supported yet. Migrate the optional dependencies in `setup.py`
# here, once this is supported.
# [project.optional-dependencies]
# ...
# full = [
# "%(jax)s",
# "%(zoo)s",
# "%(pls_calib)s",
# ]

[project.urls]
homepage = "https://probnum.readthedocs.io/en/stable/"
github = "https://github.com/probabilistic-numerics/probnum"
documentation = "https://probnum.readthedocs.io/en/stable/"
benchmarks = "https://probabilistic-numerics.github.io/probnum-benchmarks/benchmarks/"

################################################################################
# PEP 518 Build System Configuration #
################################################################################

# see https://peps.python.org/pep-0518/

[build-system]
requires = [
"setuptools>=42",
"setuptools>=61",
"wheel",
"setuptools_scm[toml]>=6.0",
]
build-backend = "setuptools.build_meta"

# see https://setuptools.pypa.io/en/stable/userguide/pyproject_config.html#setuptools-specific-configuration

[tool.setuptools]
platforms = [
"any",
]
zip-safe = false
packages = ["probnum"]
Copy link
Collaborator Author

@marvinpfoertner marvinpfoertner Mar 27, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I specified probnum here manually instead of collecting it magically using the [tool.setuptools.packages.find] directive. This way, we need less configuration lines and we avoid weird artifacts if stuff that we don't want installed gets collected. "Explicit is better than implicit" 😁

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This means that any additional packages under src that we want installed must also be listed here in the future, which gives a very nice overview of the package contents.

package-dir = { "" = "src" }
include-package-data = true

[tool.setuptools.dynamic]
version = { attr = "probnum._version.version" }

[tool.setuptools_scm]
local_scheme = "dirty-tag"
write_to = "src/probnum/_version.py"
Expand All @@ -20,7 +88,13 @@ write_to_template = """
version = \"{version}\"
"""

# PyTest configuration
################################################################################
# Testing Configuration #
################################################################################

# see https://docs.pytest.org/en/stable/reference/customize.html
# see https://docs.pytest.org/en/stable/reference/reference.html#ini-options-ref

[tool.pytest.ini_options]
addopts = [
"--verbose",
Expand All @@ -44,28 +118,22 @@ filterwarnings = [
"ignore:the imp module is deprecated in favour of importlib.*:DeprecationWarning:flatbuffers.*"
]

################################################################################
# Linting Configuration #
################################################################################

# Configuration of the black code style checker
# For more information about Black's usage of this file, see
# https://github.com/psf/black#pyprojecttoml
[tool.black]
include = '\.pyi?$'
exclude = '''
/(
\.eggs
| \.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| buck-out
| build
| dist
)/
'''
[tool.pylint.master]
extension-pkg-whitelist = [
"numpy",
]
load-plugins = [
"pylint.extensions.check_elif",
"pylint.extensions.docparams",
"pylint.extensions.docstyle",
"pylint.extensions.overlapping_exceptions",
"pylint.extensions.mccabe",
]

# Pylint configuration
[tool.pylint.messages_control]
disable = [
# Exceptions suggested by Black:
Expand All @@ -84,18 +152,6 @@ disable = [
[tool.pylint.format]
max-line-length = "88"

[tool.pylint.master]
extension-pkg-whitelist = [
"numpy",
]
load-plugins = [
"pylint.extensions.check_elif",
"pylint.extensions.docparams",
"pylint.extensions.docstyle",
"pylint.extensions.overlapping_exceptions",
"pylint.extensions.mccabe",
]

[tool.pylint.design]
max-args = 10
max-complexity = 14
Expand All @@ -104,12 +160,31 @@ max-locals = 20
[tool.pylint.similarities]
ignore-imports = "yes"

# isort configuration
################################################################################
# Formatting Configuration #
################################################################################

# see https://black.readthedocs.io/en/stable/usage_and_configuration/index.html

[tool.black]
include = '\.pyi?$'
# If `exclude` is not set, `black` excludes all files listed in `.gitignore`.
# The following option extends this list of ignored files.
# see https://black.readthedocs.io/en/stable/usage_and_configuration/file_collection_and_discovery.html#gitignore
extend-exclude = '''
# A regex preceded with ^/ will apply only to files and directories in the root
# of the project.
/(
\.git
| \.hg
)/
'''

# see https://pycqa.github.io/isort/docs/configuration/config_files.html
# see https://pycqa.github.io/isort/docs/configuration/options.html

[tool.isort]
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
use_parentheses = true
line_length = 88
# see https://pycqa.github.io/isort/docs/configuration/profiles.html#black
profile = "black"
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This combines all deleted options, but it will be kept up-to-date with blacks behavior

combine_as_imports = true
force_sort_within_sections = true
16 changes: 0 additions & 16 deletions requirements.txt

This file was deleted.

102 changes: 0 additions & 102 deletions setup.cfg

This file was deleted.

25 changes: 24 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,28 @@
"""
from setuptools import setup

# TODO (pypa/setuptools#3221): Migrate this to `[project.optional-dependencies]` in
# `pyproject.toml`, once optional dependencies defined there can reference one another
extras_require = dict()
extras_require["jax"] = [
"jax[cpu]<0.3.5; platform_system!='Windows'",
]
extras_require["zoo"] = [
"tqdm>=4.0",
"requests>=2.0",
] + extras_require["jax"]
extras_require["pls_calib"] = [
"GPy",
# GPy can't be imported without matplotlib.
# This is and should not be a ProbNum dependency.
"matplotlib",
]
extras_require["full"] = (
extras_require["jax"] + extras_require["zoo"] + extras_require["pls_calib"]
)
marvinpfoertner marked this conversation as resolved.
Show resolved Hide resolved


if __name__ == "__main__":
setup()
setup(
extras_require=extras_require,
)