diff --git a/nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py b/nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py index 0711a2b..96f3f1d 100755 --- a/nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py +++ b/nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py @@ -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 @@ -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 @@ -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 @@ -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: diff --git a/nionswift_plugin/nion_experimental_tools/test/MultiDimensionalProcessing_test.py b/nionswift_plugin/nion_experimental_tools/test/MultiDimensionalProcessing_test.py index 6e94708..91d8497 100755 --- a/nionswift_plugin/nion_experimental_tools/test/MultiDimensionalProcessing_test.py +++ b/nionswift_plugin/nion_experimental_tools/test/MultiDimensionalProcessing_test.py @@ -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)