Skip to content

Commit

Permalink
Merge pull request #525 from ubermag/precommit_updates
Browse files Browse the repository at this point in the history
Update pre-commits and pytest configuration
  • Loading branch information
samjrholt authored Jun 5, 2024
2 parents d975a20 + 07337e5 commit 7ac627f
Show file tree
Hide file tree
Showing 18 changed files with 74 additions and 90 deletions.
7 changes: 2 additions & 5 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,14 @@ exclude: 'dev'

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v4.5.0
hooks:
- id: check-merge-conflict # checks for files that contain merge conflict strings
- id: check-toml # checks toml files for parseable syntax
- id: debug-statements # checks for debugger imports and py37+ `breakpoint()` calls in python source
# - id: trailing-whitespace # needs more checks
# args: [--markdown-linebreak-ext=md]
# exclude: 'discretisedfield/tests/test_sample/.*'

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.11
rev: v0.4.4
hooks:
# Run the linter.
- id: ruff
Expand Down
17 changes: 9 additions & 8 deletions discretisedfield/__init__.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
"""Finite-difference fields."""

import importlib.metadata
import pathlib

import matplotlib.pyplot as plt
import pytest

from . import tools # noqa: F401
from .field import Field # noqa: F401
from .field_rotator import FieldRotator # noqa: F401
from .interact import interact # noqa: F401
from .line import Line # noqa: F401
from .mesh import Mesh # noqa: F401
from .operators import integrate # noqa: F401
from .region import Region # noqa: F401
from . import tools as tools
from .field import Field as Field
from .field_rotator import FieldRotator as FieldRotator
from .interact import interact as interact
from .line import Line as Line
from .mesh import Mesh as Mesh
from .operators import integrate as integrate
from .region import Region as Region

# Enable default plotting style.
plt.style.use(pathlib.Path(__file__).parent / "plotting" / "plotting-style.mplstyle")
Expand Down
10 changes: 5 additions & 5 deletions discretisedfield/field.py
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@ def vdim_mapping(self, vdim_mapping):
def _r_dim_mapping(self):
"""Map dims to vdims."""
reversed_mapping = {val: key for key, val in self.vdim_mapping.items()}
return {dim: reversed_mapping.get(dim, None) for dim in self.mesh.region.dims}
return {dim: reversed_mapping.get(dim) for dim in self.mesh.region.dims}

def __abs__(self):
"""Absolute value of the field.
Expand Down Expand Up @@ -1647,12 +1647,12 @@ def __truediv__(self, other):
2. Divide vector field by a scalar.
>>> f1 = df.Field(mesh, nvdim=3, value=(0, 10, 5))
>>> f1 = df.Field(mesh, nvdim=3, value=(20, 10, 5))
>>> res = f1 / 5 # discretisedfield.Field.__mul__ is called
>>> res.mean()
array([0., 2., 1.])
>>> (10 / f1).mean() # division by a vector is not allowed
array([inf, 1., 2.])
array([4., 2., 1.])
>>> (10 / f1).mean()
array([0.5, 1. , 2. ])
.. seealso:: :py:func:`~discretisedfield.Field.__mul__`
Expand Down
1 change: 1 addition & 0 deletions discretisedfield/io/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
and :py:func:`discretisedfield.Field.fromfile` instead.
"""

import json
import pathlib

Expand Down
1 change: 1 addition & 0 deletions discretisedfield/io/ovf2vtk.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""OVF to VTK file conversion."""

import argparse

import discretisedfield as df
Expand Down
2 changes: 1 addition & 1 deletion discretisedfield/mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -1544,7 +1544,7 @@ def dV(self):
8.0
"""
return np.product(self.cell)
return np.prod(self.cell)

def scale(self, factor, reference_point=None, inplace=False):
"""Scale the underlying region and all subregions.
Expand Down
26 changes: 13 additions & 13 deletions discretisedfield/plotting/__init__.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
"""Matplotlib based plotting."""
# ruff: noqa: F401
from discretisedfield.plotting import util
from discretisedfield.plotting.hv import Hv
from discretisedfield.plotting.k3d_field import K3dField
from discretisedfield.plotting.k3d_mesh import K3dMesh
from discretisedfield.plotting.k3d_region import K3dRegion
from discretisedfield.plotting.mpl import add_colorwheel
from discretisedfield.plotting.mpl_field import MplField
from discretisedfield.plotting.mpl_mesh import MplMesh
from discretisedfield.plotting.mpl_region import MplRegion
from discretisedfield.plotting.pyvista_field import PyVistaField
from discretisedfield.plotting.pyvista_mesh import PyVistaMesh
from discretisedfield.plotting.pyvista_region import PyVistaRegion

from discretisedfield.plotting import util as util
from discretisedfield.plotting.hv import Hv as Hv
from discretisedfield.plotting.k3d_field import K3dField as K3dField
from discretisedfield.plotting.k3d_mesh import K3dMesh as K3dMesh
from discretisedfield.plotting.k3d_region import K3dRegion as K3dRegion
from discretisedfield.plotting.mpl import add_colorwheel as add_colorwheel
from discretisedfield.plotting.mpl_field import MplField as MplField
from discretisedfield.plotting.mpl_mesh import MplMesh as MplMesh
from discretisedfield.plotting.mpl_region import MplRegion as MplRegion
from discretisedfield.plotting.pyvista_field import PyVistaField as PyVistaField
from discretisedfield.plotting.pyvista_mesh import PyVistaMesh as PyVistaMesh
from discretisedfield.plotting.pyvista_region import PyVistaRegion as PyVistaRegion
1 change: 1 addition & 0 deletions discretisedfield/plotting/hv.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Holoviews-based plotting."""

import contextlib
import copy
import functools
Expand Down
1 change: 1 addition & 0 deletions discretisedfield/plotting/k3d_field.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""K3d based plotting."""

import k3d
import matplotlib
import numpy as np
Expand Down
1 change: 1 addition & 0 deletions discretisedfield/plotting/mpl.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Matplotlib-based plotting."""

import abc

import matplotlib.pyplot as plt
Expand Down
1 change: 1 addition & 0 deletions discretisedfield/plotting/mpl_field.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Matplotlib-based plotting."""

import warnings

import matplotlib.pyplot as plt
Expand Down
8 changes: 4 additions & 4 deletions discretisedfield/tests/test_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -3997,16 +3997,16 @@ def test_pyvista_scalar(test_field):

def test_pyvista_volume(test_field):
# Default
test_field.a.pyvista.volume()
test_field.c.pyvista.volume()

# Colormap
test_field.a.pyvista.volume(cmap="hsv")
test_field.c.pyvista.volume(cmap="hsv")

# Multiplier
test_field.a.pyvista.volume(multiplier=1e-6)
test_field.c.pyvista.volume(multiplier=1e-6)

# 3D
test_field.pyvista.volume(scalars=test_field.vdims[0])
test_field.pyvista.volume(scalars=test_field.vdims[2])

# Plotter
plotter = pv.Plotter()
Expand Down
22 changes: 10 additions & 12 deletions discretisedfield/tools/__init__.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
"""Convenience tools"""
# ruff: noqa: F401
from .tools import (
count_bps,
count_large_cell_angle_regions,
demag_field,
demag_tensor,
emergent_magnetic_field,
max_neighbouring_cell_angle,
neighbouring_cell_angle,
topological_charge,
topological_charge_density,
)

from .tools import count_bps as count_bps
from .tools import count_large_cell_angle_regions as count_large_cell_angle_regions
from .tools import demag_field as demag_field
from .tools import demag_tensor as demag_tensor
from .tools import emergent_magnetic_field as emergent_magnetic_field
from .tools import max_neighbouring_cell_angle as max_neighbouring_cell_angle
from .tools import neighbouring_cell_angle as neighbouring_cell_angle
from .tools import topological_charge as topological_charge
from .tools import topological_charge_density as topological_charge_density
4 changes: 2 additions & 2 deletions discretisedfield/tools/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,9 +273,9 @@ def topological_charge(field, /, method="continuous", absolute=False):

q = topological_charge_density(field, method=method)
if absolute:
return float(abs(q).integrate())
return abs(q).integrate().item()
else:
return float(q.integrate())
return q.integrate().item()


def emergent_magnetic_field(field):
Expand Down
6 changes: 4 additions & 2 deletions discretisedfield/util/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# ruff: noqa: F401
from .util import array2tuple, assemble_index, bergluescher_angle, rescale_xarray
from .util import array2tuple as array2tuple
from .util import assemble_index as assemble_index
from .util import bergluescher_angle as bergluescher_angle
from .util import rescale_xarray as rescale_xarray
27 changes: 17 additions & 10 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,12 @@ repository = "https://github.com/ubermag/discretisedfield"
[project.scripts]
ovf2vtk = "discretisedfield.io.ovf2vtk:ovf2vtk"

[tool.ruff]
ignore-init-module-imports = true # do not remove unused imports in __init__ and warn instead

[tool.coverage.run]
omit = ["discretisedfield/tests/*"]

[tool.ruff.lint]
ignore-init-module-imports = true # do not remove unused imports in __init__ and warn instead
select = [
"B", # flake8-bugbear
"E", # pycodestyle
Expand All @@ -97,15 +99,20 @@ ignore = [
[tool.ruff.lint.isort]
known-local-folder = ["discretisedfield"]

[tool.ruff.per-file-ignores]
"*.ipynb" = ["B018", "E501", "F811"]
# F811: 'redefined-while-unused'; many false positives in notebooks because ipywidgets decorated functions are not recognised
# E501: line too long
# B018: "Found useless expression. Either assign it to a variable or remove it."

[tool.ruff.lint.per-file-ignores]
"*.ipynb" = [
"B018", # "Found useless expression. Either assign it to a variable or remove it."; false positives when using implicit __repr__ in the notebook
"E501", # line too long
"F811", # 'redefined-while-unused'; many false positives in notebooks because ipywidgets decorated functions are not recognised
]

[tool.coverage.run]
omit = ["discretisedfield/tests/*"]
[tool.pytest.ini_options]
filterwarnings = [
"error",
"ignore:((.|\n)*)Sentinel is not a public part of the traitlets API((.|\n)*)", # dependency of k3d
"ignore:((.|\n)*)`ipykernel.pylab.backend_inline` is deprecated((.|\n)*)", # dependency of ipywidgets
"ignore:((.|\n)*)Automatic coloring is only supported for 3d fields.((.|\n)*)", # Our warning
]

[tool.setuptools.packages.find]
include = ["discretisedfield*"]
Expand Down
28 changes: 0 additions & 28 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,30 +1,2 @@
[flake8]
exclude =
.git,
__pycache__,
build,
dev,
dist,
setup.py
# black has a longer default line length
max-line-length = 88
# D107: missing docstring in __init__
# E203: withespace before ':', required for black
# RST210: Inline strong start-string without end-string. # complains about "**kwargs" in docstrings
extend-ignore = D107,RST210,E203
per-file-ignores =
# imported but unused
__init__.py: F401
# ignore missing docstrings in tests
test_*.py: D100,D101,D102,D103
docstring-convention: numpy
# flake8-rst-docstrings:
rst-roles =
py:class,
py:func,
rst-directives =
seealso,
plot,

[codespell]
skip = .*,build/*,dev/*,dist/*
1 change: 1 addition & 0 deletions tasks.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Tasks to release the package."""

import os
import shutil

Expand Down

0 comments on commit 7ac627f

Please sign in to comment.