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

MAINT: update pip constraints and pre-commit #530

Merged
merged 18 commits into from
Aug 7, 2024
Merged
Changes from 1 commit
Commits
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
Prev Previous commit
Next Next commit
MAINT: address linting issues
redeboer committed Aug 6, 2024
commit 14ff31f99ec6cf29f3cd52d684c1f6c54b49ec96
1 change: 1 addition & 0 deletions .cspell.json
Original file line number Diff line number Diff line change
@@ -38,6 +38,7 @@
"typings"
],
"ignoreWords": [
"FURB",
"MAINT",
"Nelder",
"PYDEVD",
5 changes: 4 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -23,8 +23,10 @@ repos:
- |
cell.attachments
cell.metadata.code_folding
cell.metadata.editable
cell.metadata.id
cell.metadata.pycharm
cell.metadata.slideshow
cell.metadata.user_expressions
metadata.celltoolbar
metadata.colab.name
@@ -40,7 +42,7 @@ repos:
metadata.vscode
- repo: https://github.com/ComPWA/policy
rev: 0.3.11
rev: 0.3.16
hooks:
- id: check-dev-files
args:
@@ -53,6 +55,7 @@ repos:
- --repo-title=TensorWaves
- id: colab-toc-visible
- id: fix-nbformat-version
- id: remove-empty-tags
- id: set-nb-cells
args:
- --add-install-cell
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -33,6 +33,9 @@
"cSpell.enabled": true,
"diffEditor.experimental.showMoves": true,
"editor.formatOnSave": true,
"files.associations": {
"**/.constraints/py*.txt": "pip-requirements"
},
"files.watcherExclude": {
"**/*_cache/**": true,
"**/.eggs/**": true,
4 changes: 2 additions & 2 deletions benchmarks/ampform.py
Original file line number Diff line number Diff line change
@@ -197,8 +197,8 @@ def test_fit(self, backend, benchmark, model, size):

def print_data_sample(data: DataSample, sample_size: int) -> None:
"""Print a `.DataSample`, so it can be pasted into the expected sample."""
print() # noqa: T201
pprint({ # noqa: T203
print()
pprint({
i: np.round(four_momenta[:sample_size], decimals=11).tolist()
for i, four_momenta in data.items()
})
4 changes: 2 additions & 2 deletions benchmarks/expression.py
Original file line number Diff line number Diff line change
@@ -114,7 +114,7 @@ def test_data(backend, benchmark, size):
def test_fit(
backend: str,
benchmark,
optimizer_type: type[Minuit2] | type[ScipyMinimizer],
optimizer_type: type[Minuit2 | ScipyMinimizer],
size: int,
):
domain, data = generate_data_and_domain(backend, n_data=size, n_domain=10 * size)
@@ -131,7 +131,7 @@ def test_fit(
result = benchmark(optimizer.optimize, estimator, function.parameters)

assert pytest.approx(result.estimator_value, rel=1e-2) == original_nll
if optimizer_type not in {ScipyMinimizer}:
if optimizer_type != ScipyMinimizer:
assert result.minimum_valid
for par in function.parameters:
original_value = original_parameters[par]
2 changes: 1 addition & 1 deletion docs/conf.py
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@
def create_tensorflow_inventory() -> None:
if os.path.exists("tensorflow.inv"):
return
subprocess.check_call(
subprocess.check_call( # noqa: S603
("sphobjinv", "convert", "-o", "zlib", "tensorflow.txt"),
)

74 changes: 42 additions & 32 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -220,6 +220,10 @@ module = ["phasespace"]
ignore_missing_imports = true
module = ["scipy.optimize"]

[[tool.mypy.overrides]]
ignore_missing_imports = true
module = ["sympy.*"]

[[tool.mypy.overrides]]
ignore_missing_imports = true
module = ["tensorflow.python.ops.numpy_ops"]
@@ -309,40 +313,11 @@ docstring-code-format = true
line-ending = "lf"

[tool.ruff.lint]
extend-select = [
"A",
"B",
"BLE",
"C4",
"C90",
"D",
"EM",
"ERA",
"FA",
"I",
"ICN",
"INP",
"ISC",
"N",
"NPY",
"PGH",
"PIE",
"PL",
"Q",
"RET",
"RSE",
"RUF",
"S",
"SIM",
"T20",
"TCH",
"TID",
"TRY",
"UP",
"YTT",
]
ignore = [
"ANN401",
"C408",
"COM812",
"CPY001",
"D101",
"D102",
"D103",
@@ -352,23 +327,48 @@ ignore = [
"D213",
"D407",
"D416",
"DOC",
"DTZ005",
"E501",
"FBT00",
"FURB10",
"FURB140",
"G004",
"ISC001",
"PLW1514",
"PT001",
"PTH",
"RUF012",
"S307",
"SIM108",
]
select = ["ALL"]
task-tags = ["cspell"]

[tool.ruff.lint.flake8-builtins]
builtins-ignorelist = ["display"]

[tool.ruff.lint.flake8-comprehensions]
allow-dict-calls-with-keyword-arguments = true

[tool.ruff.lint.flake8-self]
ignore-names = [
"_latex",
"_numpycode",
"_print",
]

[tool.ruff.lint.isort]
split-on-trailing-comma = false

[tool.ruff.lint.per-file-ignores]
"*.ipynb" = [
"ANN",
"ARG002",
"B018",
"C90",
"D",
"E303",
"E402",
"E703",
"F404",
@@ -389,14 +389,21 @@ split-on-trailing-comma = false
"F821",
]
"benchmarks/*" = [
"ANN",
"D",
"INP001",
"PGH001",
"PLC0415",
"PLC2701",
"PLR0913",
"PLR0917",
"PLR2004",
"PLR6301",
"S101",
"SLF001",
"T20",
]
"callbacks.py" = ["ARG002"]
"docs/*" = [
"E402",
"INP001",
@@ -413,6 +420,8 @@ split-on-trailing-comma = false
"src/tensorwaves/function/_backend.py" = ["PLC0415"]
"src/tensorwaves/function/sympy/__init__.py" = ["PLC0415"]
"tests/*" = [
"ANN",
"ARG002",
"D",
"INP001",
"PGH001",
@@ -424,6 +433,7 @@ split-on-trailing-comma = false
"PLR2004",
"PLR6301",
"S101",
"SLF001",
"T20",
]

3 changes: 2 additions & 1 deletion src/tensorwaves/data/_data_sample.py
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@

from __future__ import annotations

import operator
from typing import TYPE_CHECKING, Any, Callable

import numpy as np
@@ -27,7 +28,7 @@ def _determine_merge_method(
sample: DataSample,
) -> Callable[[tuple[np.ndarray, np.ndarray]], np.ndarray]:
if len(sample) == 0:
return lambda sample_tuple: sample_tuple[1]
return operator.itemgetter(1)
some_array = next(iter(sample.values()))
rank = len(some_array.shape)
if rank == 1:
4 changes: 2 additions & 2 deletions src/tensorwaves/data/rng.py
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@
class NumpyUniformRNG(RealNumberGenerator):
"""Implements a uniform real random number generator using `numpy`."""

def __init__(self, seed: float | None = None):
def __init__(self, seed: float | None = None) -> None:
self.seed = seed

def __call__(
@@ -45,7 +45,7 @@ def seed(self, value: float | None) -> None:
class TFUniformRealNumberGenerator(RealNumberGenerator):
"""Implements a uniform real random number generator using tensorflow."""

def __init__(self, seed: float | None = None):
def __init__(self, seed: float | None = None) -> None:
try:
from tensorflow import float64 # noqa: PLC0415
except ImportError: # pragma: no cover
2 changes: 1 addition & 1 deletion src/tensorwaves/estimator.py
Original file line number Diff line number Diff line change
@@ -86,7 +86,7 @@ def gradient_creator(
return jax.grad(function)

def raise_gradient_not_implemented(
parameters: Mapping[str, ParameterValue],
parameters: Mapping[str, ParameterValue], # noqa: ARG001
) -> dict[str, ParameterValue]:
msg = f"Gradient not implemented for back-end {backend}."
raise NotImplementedError(msg)
2 changes: 1 addition & 1 deletion src/tensorwaves/function/sympy/__init__.py
Original file line number Diff line number Diff line change
@@ -468,7 +468,7 @@ def prepare_caching(
transformer_expressions[symbol] = sub_expr
undefined_variables.update(variables - _get_free_symbols(sub_expr))
for symbol in undefined_variables:
transformer_expressions[symbol] = symbol
transformer_expressions[symbol] = symbol # noqa: PERF403
return cache_expression, transformer_expressions


4 changes: 2 additions & 2 deletions src/tensorwaves/function/sympy/_printer.py
Original file line number Diff line number Diff line change
@@ -23,8 +23,8 @@ def __init__(self) -> None:
"allow_unknown_functions": True,
}
)
self._kc = _replace_module(NumPyPrinter._kc, "numpy", self._module)
self._kf = _replace_module(NumPyPrinter._kf, "numpy", self._module)
self._kc = _replace_module(NumPyPrinter._kc, "numpy", self._module) # noqa: SLF001
self._kf = _replace_module(NumPyPrinter._kf, "numpy", self._module) # noqa: SLF001
self.printmethod = "_numpycode" # force using _numpycode methods


2 changes: 1 addition & 1 deletion src/tensorwaves/interface.py
Original file line number Diff line number Diff line change
@@ -142,7 +142,7 @@ def _repr_pretty_(self, p: PrettyPrinter, cycle: bool) -> None:
else:
with p.group(indent=1, open=f"{class_name}("):
for attribute in attrs.fields(type(self)): # type: ignore[misc]
if attribute.name in {"specifics"}:
if attribute.name == "specifics":
continue
value = getattr(self, attribute.name)
if value != attribute.default:
3 changes: 1 addition & 2 deletions src/tensorwaves/optimizer/scipy.py
Original file line number Diff line number Diff line change
@@ -80,8 +80,7 @@ def create_parameter_dict(
)

def wrapped_function(pars: list) -> float:
nonlocal n_function_calls
nonlocal estimator_value
nonlocal n_function_calls, estimator_value
n_function_calls += 1
update_parameters(pars)
parameters = parameter_handler.unflatten(flattened_parameters)
2 changes: 1 addition & 1 deletion tests/function/test_function.py
Original file line number Diff line number Diff line change
@@ -117,7 +117,7 @@ def test_variadic_args(self):


def test_get_source_code():
def inline_function(a, x):
def inline_function(a, x): # noqa: FURB118
return a * x

function = PositionalArgumentFunction(
4 changes: 2 additions & 2 deletions tests/optimizer/test_fit_simple_model.py
Original file line number Diff line number Diff line change
@@ -116,7 +116,7 @@ def test_optimize_all_parameters(
backend: str,
domain_and_data_sample: tuple[DataSample, DataSample],
expression_and_parameters: tuple[sp.Expr, dict[sp.Symbol, float]],
optimizer_type: type[Minuit2] | type[ScipyMinimizer],
optimizer_type: type[Minuit2 | ScipyMinimizer],
output_dir: Path,
):
domain, data = domain_and_data_sample
@@ -157,7 +157,7 @@ def test_optimize_all_parameters(
assert pytest.approx(yaml[par]) == result.parameter_values[par]

assert pytest.approx(result.estimator_value, rel=5e-3) == original_nll
if optimizer_type not in {ScipyMinimizer}:
if optimizer_type != ScipyMinimizer:
assert result.minimum_valid
for par in function.parameters:
original_value = original_parameters[par]
3 changes: 2 additions & 1 deletion tests/optimizer/test_minuit.py
Original file line number Diff line number Diff line change
@@ -37,7 +37,8 @@ def __call__(self, parameters: Mapping[str, ParameterValue]) -> float:
return self.__polynomial(_x, _y)

def gradient(
self, parameters: Mapping[str, ParameterValue]
self,
parameters: Mapping[str, ParameterValue],
) -> dict[str, ParameterValue]:
return NotImplemented

6 changes: 4 additions & 2 deletions tests/optimizer/test_scipy.py
Original file line number Diff line number Diff line change
@@ -22,7 +22,8 @@ def __call__(self, parameters: Mapping[str, ParameterValue]) -> float:
return self.__polynomial(_x)

def gradient(
self, parameters: Mapping[str, ParameterValue]
self,
parameters: Mapping[str, ParameterValue],
) -> dict[str, ParameterValue]:
return NotImplemented

@@ -37,7 +38,8 @@ def __call__(self, parameters: Mapping[str, ParameterValue]) -> float:
return self.__polynomial(_x, _y)

def gradient(
self, parameters: Mapping[str, ParameterValue]
self,
parameters: Mapping[str, ParameterValue],
) -> dict[str, ParameterValue]:
return NotImplemented

4 changes: 3 additions & 1 deletion tests/test_interface.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import math

import pytest
from IPython.lib.pretty import pretty

@@ -13,7 +15,7 @@ def fit_result(self) -> FitResult:
function_calls=50,
estimator_value=-2e4,
parameter_values={
R"\pi": 3.14,
R"\pi": math.pi,
"a": -5.0,
"complex": 1 + 1j,
},