Skip to content
Closed
Show file tree
Hide file tree
Changes from all 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
11 changes: 4 additions & 7 deletions nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from nion.typeshed import API_1_0 as API
from nion.data import xdata_1_0 as xd
from nion.swift import Facade
from nion.swift.model import DisplayItem
from nion.swift.model import Symbolic

_ = gettext.gettext
Expand Down Expand Up @@ -117,7 +118,7 @@ def sequence_split(api: Facade.API_1, window: Facade.DocumentWindow, display_ite
# For line plots with multiple display layers we want to copy the display properties so that the split items
# look like the original display item. Exclude case where the display layers are generated from the sequence
# dimension because in this case the display layers are not valid anymore.
display_layers = None
display_layers: list[DisplayItem.DisplayLayer] | None = None
legend_position = None
display_type = None
data_item_ = display_item._display_item.data_item
Expand All @@ -127,7 +128,7 @@ def sequence_split(api: Facade.API_1, window: Facade.DocumentWindow, display_ite
if not data_item_xdata:
return list()
if data_item_xdata and len(data_item_xdata.data_shape) > 2 and (data_item_xdata.datum_dimension_count == 1 or display_item.display_type == 'line_plot'):
display_layers = copy.deepcopy(display_item._display_item.display_layers)
display_layers = typing.cast(list[DisplayItem.DisplayLayer], display_item._display_item.display_layers)
legend_position = display_item._display_item.get_display_property('legend_position')
display_type = display_item.display_type

Expand All @@ -147,12 +148,8 @@ def sequence_split(api: Facade.API_1, window: Facade.DocumentWindow, display_ite
result_display_item = window._document_controller.document_model.get_display_item_for_data_item(result_data_item._data_item)
if result_display_item:
window._document_controller.show_display_item(result_display_item)

if display_layers:
while result_display_item.display_layers:
result_display_item.remove_display_layer(0)
for display_layer in display_layers:
result_display_item.append_display_layer(display_layer)
result_display_item.display_layers_list = display_layers
if legend_position is not None:
result_display_item.set_display_property('legend_position', legend_position)
if display_type is not None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -551,3 +551,25 @@ def test_sequence_split_computation(self) -> None:

# print([computation.error_text for computation in document_model.computations])
# print([data_item.title for data_item in document_model.data_items])

def test_sequence_split_computation_sequence(self) -> None:
with create_memory_profile_context() as test_context:
document_controller = test_context.create_document_controller_with_application()
document_model = document_controller.document_model
api = Facade.get_api("~1.0", "~1.0")
# setup
xdata = DataAndMetadata.new_data_and_metadata(numpy.random.randn(10,16,16,512), data_descriptor=DataAndMetadata.DataDescriptor(True, 2, 1))
data_item = DataItem.new_data_item(xdata)
data_item.title = "Sequence"
document_model.append_data_item(data_item)
display_item = document_model.get_display_item_for_data_item(data_item)
# make computation and execute
result_data_items = SequenceSplitJoin.sequence_split(api, Facade.DocumentWindow(document_controller), Facade.Display(display_item))
document_model.recompute_all()
document_controller.periodic()
# check results
self.assertEqual(11, len(document_model.data_items))
self.assertFalse(any(computation.error_text for computation in document_model.computations))
self.assertIn("Split 1/10", result_data_items[0].title)
self.assertIn("Split 2/10", result_data_items[1].title)
self.assertIn("Split 10/10", result_data_items[9].title)