Skip to content

Commit

Permalink
Merge pull request #228 from CSSFrancis/numpy2
Browse files Browse the repository at this point in the history
Deprecation: Fix ptp --> np.ptp for numpy 2.0.0
  • Loading branch information
CSSFrancis authored Oct 11, 2024
2 parents decf198 + 53155ec commit 6f19665
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 22 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Removed

Fixed
-----
- Numpy 2.0.0 compatibility in (#228).

2024-06-06 - version 0.6.0
==========================
Expand Down
7 changes: 7 additions & 0 deletions diffsims/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import numpy as np

# TODO: Remove this section when minimum numpy version is 1.25.0
if np.__version__ >= "1.25.0":
from numpy.exceptions import VisibleDeprecationWarning
else:
VisibleDeprecationWarning = np.VisibleDeprecationWarning
2 changes: 1 addition & 1 deletion diffsims/generators/diffraction_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@ def calculate_ed_data(

# Add z-coordinate
z_range = max(
z_range, coordinates[:, -1].ptp()
z_range, np.ptp(coordinates[:, -1])
) # enforce minimal resolution in reciprocal space
x = [
self.detector[0],
Expand Down
1 change: 1 addition & 0 deletions diffsims/simulations/simulation2d.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ def current_size(self):
return self.rotations.size

def deepcopy(self):

return copy.deepcopy(self)

def _get_transformed_coordinates(
Expand Down
13 changes: 7 additions & 6 deletions diffsims/tests/crystallography/test_get_hkl.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@
get_hkl,
ReciprocalLatticeVector,
)
from diffsims.constants import VisibleDeprecationWarning


class TestGetHKL:
@pytest.mark.parametrize("highest_hkl, n", [([1, 2, 3], 105), ([1, 1, 1], 27)])
def test_get_hkl(self, highest_hkl, n):
highest_hkl = np.array(highest_hkl)
with pytest.warns(np.VisibleDeprecationWarning):
with pytest.warns(VisibleDeprecationWarning):
hkl = get_hkl(highest_hkl)
assert np.allclose(hkl.max(axis=0), highest_hkl)
assert np.allclose(hkl.min(axis=0), -highest_hkl)
Expand All @@ -52,7 +53,7 @@ def test_get_hkl(self, highest_hkl, n):
"d, hkl", [(0.5, [6, 6, 21]), (1, [3, 3, 11]), (1.5, [2, 2, 7])]
)
def test_get_highest_hkl(self, silicon_carbide_phase, d, hkl):
with pytest.warns(np.VisibleDeprecationWarning):
with pytest.warns(VisibleDeprecationWarning):
hkl_out = get_highest_hkl(
silicon_carbide_phase.structure.lattice, min_dspacing=d
)
Expand All @@ -64,7 +65,7 @@ def test_get_highest_hkl(self, silicon_carbide_phase, d, hkl):

def test_get_equivalent_hkl(self):
phase_225 = Phase(space_group=225)
with pytest.warns(np.VisibleDeprecationWarning):
with pytest.warns(VisibleDeprecationWarning):
hkl1 = get_equivalent_hkl(
[1, 1, 1], operations=phase_225.point_group, unique=True
)
Expand All @@ -86,12 +87,12 @@ def test_get_equivalent_hkl(self):
g1 = ReciprocalLatticeVector(phase_225, hkl=[1, 1, 1])
assert np.allclose(g1.symmetrise().hkl, hkl1.data)

with pytest.warns(np.VisibleDeprecationWarning):
with pytest.warns(VisibleDeprecationWarning):
hkl2 = get_equivalent_hkl([1, 1, 1], operations=phase_225.point_group)
assert hkl2.shape[0] == g1.symmetrise().size * 6 == 48

phase_186 = Phase(space_group=186)
with pytest.warns(np.VisibleDeprecationWarning):
with pytest.warns(VisibleDeprecationWarning):
hkl3, mult3 = get_equivalent_hkl(
[2, 2, 0],
operations=phase_186.point_group,
Expand All @@ -102,7 +103,7 @@ def test_get_equivalent_hkl(self):
assert mult3 == g3.symmetrise().size == 12
assert np.allclose(hkl3.data[:2], [[2, 2, 0], [-2.7321, 0.7321, 0]], atol=1e-4)

with pytest.warns(np.VisibleDeprecationWarning):
with pytest.warns(VisibleDeprecationWarning):
hkl4, mult4 = get_equivalent_hkl(
Vector3d([[2, 2, 0], [4, 0, 0]]),
phase_186.point_group,
Expand Down
15 changes: 8 additions & 7 deletions diffsims/tests/utils/test_deprecation.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import warnings

import numpy as np
import pytest

from diffsims.utils._deprecated import deprecated, deprecated_argument

from diffsims.constants import VisibleDeprecationWarning


class TestDeprecationWarning:
def test_deprecation_since(self):
Expand All @@ -18,7 +19,7 @@ def foo(n):
"""Some docstring."""
return n + 1

with pytest.warns(np.VisibleDeprecationWarning) as record:
with pytest.warns(VisibleDeprecationWarning) as record:
assert foo(4) == 5
desired_msg = (
"Function `foo()` is deprecated and will be removed in version 0.8. Use "
Expand All @@ -41,7 +42,7 @@ def foo2(n):
"""
return n + 2

with pytest.warns(np.VisibleDeprecationWarning) as record2:
with pytest.warns(VisibleDeprecationWarning) as record2:
assert foo2(4) == 6
desired_msg2 = "Function `foo2()` is deprecated."
assert str(record2[0].message) == desired_msg2
Expand All @@ -58,7 +59,7 @@ def test_deprecation_no_old_doc(self):
def foo(n):
return n + 1

with pytest.warns(np.VisibleDeprecationWarning) as record:
with pytest.warns(VisibleDeprecationWarning) as record:
assert foo(4) == 5
desired_msg = (
"Function `foo()` is deprecated and will be removed in version 0.8. Use "
Expand All @@ -79,7 +80,7 @@ def test_deprecation_not_function(self):
def foo(n):
return n + 1

with pytest.warns(np.VisibleDeprecationWarning) as record:
with pytest.warns(VisibleDeprecationWarning) as record:
assert foo(4) == 5
desired_msg = (
"Function `foo()` is deprecated and will be removed in version 0.8. Use "
Expand Down Expand Up @@ -118,7 +119,7 @@ def bar_arg_alt(self, **kwargs):
assert my_foo.bar_arg(b=1) == {"b": 1}

# Warns
with pytest.warns(np.VisibleDeprecationWarning) as record2:
with pytest.warns(VisibleDeprecationWarning) as record2:
assert my_foo.bar_arg(a=2) == {"a": 2}
assert str(record2[0].message) == (
r"Argument `a` is deprecated and will be removed in version 1.4. "
Expand All @@ -127,7 +128,7 @@ def bar_arg_alt(self, **kwargs):
)

# Warns with alternative
with pytest.warns(np.VisibleDeprecationWarning) as record3:
with pytest.warns(VisibleDeprecationWarning) as record3:
assert my_foo.bar_arg_alt(a=3) == {"b": 3}
assert str(record3[0].message) == (
r"Argument `a` is deprecated and will be removed in version 1.4. "
Expand Down
4 changes: 2 additions & 2 deletions diffsims/tests/utils/test_fourier_transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,9 @@ def test_freq(shape, dX, rX, dY, rY):
if dX[i] is not None:
assert abs(x[i].item(1) - x[i].item(0)) <= dX[i] + 1e-8
if rY[i] is not None:
assert y[i].ptp() >= rY[i] - 1e-8
assert np.ptp(y[i]) >= rY[i] - 1e-8
if rX[i] is not None:
assert x[i].ptp() >= rX[i] - 1e-8
assert np.ptp(x[i]) >= rX[i] - 1e-8
if dY[i] is not None:
assert abs(y[i].item(1) - y[i].item(0)) <= dY[i] + 1e-8

Expand Down
12 changes: 7 additions & 5 deletions diffsims/utils/_deprecated.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
from typing import Callable, Optional, Union
import warnings

import numpy as np
from diffsims.constants import VisibleDeprecationWarning


class deprecated:
Expand Down Expand Up @@ -90,12 +90,14 @@ def __call__(self, func: Callable):
@functools.wraps(func)
def wrapped(*args, **kwargs):
warnings.simplefilter(
action="always", category=np.VisibleDeprecationWarning, append=True
action="always",
category=VisibleDeprecationWarning,
append=True,
)
func_code = func.__code__
warnings.warn_explicit(
message=msg,
category=np.VisibleDeprecationWarning,
category=VisibleDeprecationWarning,
filename=func_code.co_filename,
lineno=func_code.co_firstlineno + 1,
)
Expand Down Expand Up @@ -143,12 +145,12 @@ def wrapped(*args, **kwargs):
kwargs[self.alternative] = kwargs.pop(self.name)
msg += f"See the documentation of `{func.__name__}()` for more details."
warnings.simplefilter(
action="always", category=np.VisibleDeprecationWarning
action="always", category=VisibleDeprecationWarning
)
func_code = func.__code__
warnings.warn_explicit(
message=msg,
category=np.VisibleDeprecationWarning,
category=VisibleDeprecationWarning,
filename=func_code.co_filename,
lineno=func_code.co_firstlineno + 1,
)
Expand Down
3 changes: 2 additions & 1 deletion diffsims/utils/discretise_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
exp,
prod,
)
import numpy as np
from psutil import virtual_memory
import numba

Expand Down Expand Up @@ -321,7 +322,7 @@ def rebin(x, loc, r, k, mem):
else:
r = r.copy()
xmin = array([X.item(0) if X.size > 1 else -1e5 for X in x], dtype=x[0].dtype)
nbins = [int(ceil(x[i].ptp() / r[i])) + 1 for i in range(3)]
nbins = [int(ceil(np.ptp(x[i]) / r[i])) + 1 for i in range(3)]
if prod(nbins) * 32 * 10 > mem:
raise MemoryError
Len = zeros(nbins, dtype="i4")
Expand Down

0 comments on commit 6f19665

Please sign in to comment.