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

Deprecation: Fix ptp --> np.ptp for numpy 2.0.0 #228

Merged
merged 4 commits into from
Oct 11, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
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
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
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
17 changes: 11 additions & 6 deletions diffsims/tests/crystallography/test_get_hkl.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,17 @@
ReciprocalLatticeVector,
)

if np.__version__ >= "2.0.0":
CSSFrancis marked this conversation as resolved.
Show resolved Hide resolved
from numpy.exceptions import VisibleDeprecationWarning
else:
VisibleDeprecationWarning = np.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 +57,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 +69,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 +91,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 +107,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
17 changes: 11 additions & 6 deletions diffsims/tests/utils/test_deprecation.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@

from diffsims.utils._deprecated import deprecated, deprecated_argument

if np.__version__ >= "2.0.0":
Copy link
Member

Choose a reason for hiding this comment

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

Instead of repeating this three places, I suggest to add a private diffsims.constants module like we've done in orix: https://github.com/pyxem/orix/blob/develop/orix/constants.py. We can then import this warning from diffsims.constants import VisibleDeprecationWarning.

from numpy.exceptions import VisibleDeprecationWarning
else:
VisibleDeprecationWarning = np.VisibleDeprecationWarning


class TestDeprecationWarning:
def test_deprecation_since(self):
Expand All @@ -18,7 +23,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 +46,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 +63,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 +84,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 +123,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 +132,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
15 changes: 11 additions & 4 deletions diffsims/utils/_deprecated.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@

import numpy as np

if np.__version__ >= "2.0.0":
from numpy.exceptions import VisibleDeprecationWarning
else:
VisibleDeprecationWarning = np.VisibleDeprecationWarning


class deprecated:
"""Decorator to mark deprecated functions with an informative
Expand Down Expand Up @@ -90,12 +95,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 +150,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
Loading