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

_assign_subclass: signal_shape (1,) now becomes BaseSignal #2773

Merged
merged 11 commits into from
Sep 5, 2021
11 changes: 5 additions & 6 deletions hyperspy/axes.py
Original file line number Diff line number Diff line change
Expand Up @@ -1203,19 +1203,18 @@ def _update_attributes(self):
self.signal_axes = self.signal_axes[::-1]
self.navigation_axes = self.navigation_axes[::-1]
self._getitem_tuple = tuple(getitem_tuple)
self.signal_dimension = len(self.signal_axes)
if len(self.signal_axes) == 1 and self.signal_axes[0].size == 1:
self.signal_dimension = 0
else:
self.signal_dimension = len(self.signal_axes)
self.navigation_dimension = len(self.navigation_axes)
if self.navigation_dimension != 0:
self.navigation_shape = tuple([
axis.size for axis in self.navigation_axes])
else:
self.navigation_shape = ()

if self.signal_dimension != 0:
self.signal_shape = tuple([
axis.size for axis in self.signal_axes])
else:
self.signal_shape = ()
self.signal_shape = tuple([axis.size for axis in self.signal_axes])
self.navigation_size = (np.cumprod(self.navigation_shape)[-1]
if self.navigation_shape else 0)
self.signal_size = (np.cumprod(self.signal_shape)[-1]
Expand Down
2 changes: 1 addition & 1 deletion hyperspy/misc/signal_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ def broadcast_signals(*args, ignore_axis=None):
for s in args:
data = s._data_aligned_with_axes
sam = s.axes_manager
sdim_diff = len(new_sig_axes) - sam.signal_dimension
sdim_diff = len(new_sig_axes) - len(sam.signal_axes)
while sdim_diff > 0:
slices = (slice(None),) * sam.navigation_dimension
slices += (None, Ellipsis)
Expand Down
5 changes: 5 additions & 0 deletions hyperspy/signal.py
Original file line number Diff line number Diff line change
Expand Up @@ -2619,6 +2619,11 @@ def plot(self, navigator="auto", axes_manager=None, plot_markers=True,
else:
navigator = "slider"
if axes_manager.signal_dimension == 0:
if axes_manager.navigation_dimension == 0:
# 0d signal without navigation axis: don't make a figure
# and instead, we display the value
print(self.data)
return
self._plot = mpl_he.MPL_HyperExplorer()
elif axes_manager.signal_dimension == 1:
# Hyperspectrum
Expand Down
6 changes: 6 additions & 0 deletions hyperspy/tests/drawing/test_plot_signal.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,3 +314,9 @@ def test_plot_autoscale(sdim):

s.change_dtype(bool)
s.plot()


def test_plot_signal_scalar():
s = hs.signals.BaseSignal([1.0])
s.plot()
assert s._plot is None
2 changes: 1 addition & 1 deletion hyperspy/tests/model/test_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -763,7 +763,7 @@ def test_out_argument(self):
@lazifyTestClass
class TestCreateModel:
def setup_method(self, method):
self.s = hs.signals.Signal1D(np.asarray([0]))
self.s = hs.signals.Signal1D(np.asarray([0, 1]))
self.im = hs.signals.Signal2D(np.ones([1, 1]))

def test_create_model(self):
Expand Down
6 changes: 4 additions & 2 deletions hyperspy/tests/signals/test_2D.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,16 @@
import pytest

from hyperspy.decorators import lazifyTestClass
from hyperspy.signal import BaseSignal
from hyperspy.signals import Signal1D, Signal2D


def _verify_test_sum_x_E(self, s):
np.testing.assert_array_equal(self.signal.data.sum(), s.data)
assert s.data.ndim == 1
# Check that there is still one signal axis.
assert s.axes_manager.signal_dimension == 1
# Check that the signal dimension is now 0
assert s.axes_manager.signal_dimension == 0
assert isinstance(s, BaseSignal)


@lazifyTestClass
Expand Down
4 changes: 2 additions & 2 deletions hyperspy/tests/signals/test_3D.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ def test_get_navigation_signal_nav_dim0(self):
s = self.signal
s = s.transpose(signal_axes=3)
ns = s._get_navigation_signal()
assert ns.axes_manager.signal_dimension == 1
assert ns.axes_manager.signal_dimension == 0
assert ns.axes_manager.signal_size == 1
assert ns.axes_manager.navigation_dimension == 0

Expand Down Expand Up @@ -233,7 +233,7 @@ def test_get_signal_signal_nav_dim0(self):
ns = s._get_signal_signal()
assert ns.axes_manager.navigation_dimension == 0
assert ns.axes_manager.navigation_size == 0
assert ns.axes_manager.signal_dimension == 1
assert ns.axes_manager.signal_dimension == 0

def test_get_signal_signal_nav_dim1(self):
s = self.signal
Expand Down
20 changes: 18 additions & 2 deletions hyperspy/tests/signals/test_assign_subclass.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import hyperspy.api as hs
from hyperspy import _lazy_signals
from hyperspy.decorators import lazifyTestClass
from hyperspy.exceptions import VisibleDeprecationWarning
from hyperspy.io import assign_signal_subclass

Expand Down Expand Up @@ -87,6 +88,21 @@ def test_id_set_signal_type():
assert id_om == id(s.original_metadata)


@lazifyTestClass
class TestToBaseSignalScalar:

def setup_method(self, method):
self.s = hs.signals.Signal1D(np.array([0]))

def test_simple(self):
self.s._assign_subclass()
assert isinstance(self.s, hs.signals.BaseSignal)
assert self.s.axes_manager.signal_dimension == 0
assert self.s.axes_manager.signal_shape == (1, )
if self.s._lazy:
assert isinstance(self.s, _lazy_signals.LazySignal)


class TestConvertBaseSignal:

def setup_method(self, method):
Expand Down Expand Up @@ -122,7 +138,7 @@ def test_base_to_complex(self):
class TestConvertSignal1D:

def setup_method(self, method):
self.s = hs.signals.Signal1D([0])
self.s = hs.signals.Signal1D([0, 1])

def test_lazy_to_eels_and_back(self):
self.s = self.s.as_lazy()
Expand Down Expand Up @@ -176,7 +192,7 @@ def test_complex_to_complex2d(self):
class TestConvertComplexSignal1D:

def setup_method(self, method):
self.s = hs.signals.ComplexSignal1D([0])
self.s = hs.signals.ComplexSignal1D([0, 1])

def test_complex_to_dielectric_function(self):
self.s.set_signal_type("DielectricFunction")
Expand Down
1 change: 1 addition & 0 deletions upcoming_changes/2773.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Signals with 1 value in the signal dimension will now be :py:class:`~.signal.BaseSignal`