Exemplo n.º 1
0
 def test_removing_graphic_as_connection_source_results_in_consistent_state(
         self):
     document_model = DocumentModel.DocumentModel()
     with contextlib.closing(document_model):
         data_item1 = DataItem.DataItem(numpy.zeros((20, )))
         data_item2 = DataItem.DataItem(numpy.zeros((20, )))
         document_model.append_data_item(data_item1)
         document_model.append_data_item(data_item2)
         display_item1 = document_model.get_display_item_for_data_item(
             data_item1)
         display_item2 = document_model.get_display_item_for_data_item(
             data_item2)
         display_item1.add_graphic(Graphics.IntervalGraphic())
         display_item2.add_graphic(Graphics.IntervalGraphic())
         graphic1 = display_item1.graphics[0]
         graphic2 = display_item2.graphics[0]
         document_model.append_connection(
             Connection.PropertyConnection(graphic1,
                                           "interval",
                                           graphic2,
                                           "interval",
                                           parent=data_item1))
         display_item1.remove_graphic(graphic1)
         # the document must have a consistent state for item transaction to work
         with document_model.item_transaction(data_item1):
             pass
         with document_model.item_transaction(data_item2):
             pass
Exemplo n.º 2
0
 async def explore_edges(self, document_controller):
     document_model = document_controller.document_model
     model_data_item = self.__model_data_item
     model_display_item = document_model.get_display_item_for_data_item(
         model_data_item)
     pick_region = Graphics.RectangleGraphic()
     pick_region.size = min(1 / 16,
                            16 / model_data_item.dimensional_shape[0]), min(
                                1 / 16,
                                16 / model_data_item.dimensional_shape[1])
     pick_region.label = _("Explore")
     model_display_item.add_graphic(pick_region)
     pick_data_item = document_model.get_pick_region_new(
         model_display_item,
         model_display_item.data_item,
         pick_region=pick_region)
     if pick_data_item:
         explore_interval = Graphics.IntervalGraphic()
         explore_interval.interval = 0.4, 0.6
         explore_interval.label = _("Explore")
         explore_interval.graphic_id = "explore"
         pick_data_item.source = model_data_item
         pick_display_item = document_model.get_display_item_for_data_item(
             pick_data_item)
         pick_display_item.add_graphic(explore_interval)
         document_controller.show_display_item(pick_display_item)
         await self.__document_model.compute_immediate(
             document_controller.event_loop,
             document_model.get_data_item_computation(pick_data_item)
         )  # need the data to make connect_explorer_interval work; so do this here. ugh.
         self.__connect_explorer_interval(document_model, pick_data_item)
Exemplo n.º 3
0
 def test_connection_establishes_transaction_on_source(self):
     with TestContext.create_memory_context() as test_context:
         document_model = test_context.create_document_model()
         data_item_src = DataItem.DataItem(numpy.zeros((1000, )))
         data_item_dst = DataItem.DataItem(numpy.zeros((1000, )))
         document_model.append_data_item(data_item_src)
         document_model.append_data_item(data_item_dst)
         display_item_src = document_model.get_display_item_for_data_item(
             data_item_src)
         display_item_dst = document_model.get_display_item_for_data_item(
             data_item_dst)
         interval_src = Graphics.IntervalGraphic()
         interval_dst = Graphics.IntervalGraphic()
         display_item_src.add_graphic(interval_src)
         display_item_dst.add_graphic(interval_dst)
         connection = Connection.PropertyConnection(interval_src,
                                                    "interval",
                                                    interval_dst,
                                                    "interval",
                                                    parent=data_item_dst)
         document_model.append_connection(connection)
         # check dependencies
         with document_model.item_transaction(data_item_dst):
             self.assertTrue(
                 document_model.is_in_transaction_state(data_item_dst))
             self.assertTrue(
                 document_model.is_in_transaction_state(display_item_dst))
             self.assertTrue(
                 document_model.is_in_transaction_state(interval_dst))
             self.assertTrue(
                 document_model.is_in_transaction_state(interval_src))
             self.assertTrue(
                 document_model.is_in_transaction_state(display_item_src))
         self.assertEqual(0, document_model.transaction_count)
Exemplo n.º 4
0
 def test_specific_parts_take_priority_when_another_selected(self):
     # setup
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         display_panel = document_controller.selected_display_panel
         data_item = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_panel.set_display_panel_display_item(display_item)
         header_height = display_panel.header_canvas_item.header_height
         display_panel.root_container.layout_immediate(
             (1000 + header_height, 1000))
         # run test
         rect_region1 = Graphics.RectangleGraphic()
         rect_region1.bounds = (0.2, 0.2), (0.4, 0.4)
         rect_region2 = Graphics.RectangleGraphic()
         rect_region2.bounds = (0.4, 0.4), (0.4, 0.4)
         display_item.add_graphic(rect_region1)
         display_item.add_graphic(rect_region2)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         # clicking on line should select it
         display_panel.display_canvas_item.simulate_click((700, 700))
         self.assertEqual(display_item.graphic_selection.indexes, set(
             (1, )))
         display_panel.display_canvas_item.simulate_click((600, 200))
         self.assertEqual(display_item.graphic_selection.indexes, set(
             (0, )))
Exemplo n.º 5
0
 def test_hit_testing_occurs_same_as_draw_order(self):
     # draw order occurs from 0 -> n
     # setup
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         display_panel = document_controller.selected_display_panel
         data_item = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_panel.set_display_panel_display_item(display_item)
         header_height = display_panel.header_canvas_item.header_height
         display_panel.root_container.layout_immediate(
             (1000 + header_height, 1000))
         # run test
         rect_region1 = Graphics.RectangleGraphic()
         rect_region1.bounds = (0.2, 0.2), (0.4, 0.4)
         rect_region2 = Graphics.RectangleGraphic()
         rect_region2.bounds = (0.4, 0.4), (0.4, 0.4)
         display_item.add_graphic(rect_region1)
         display_item.add_graphic(rect_region2)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_panel.display_canvas_item.simulate_click((500, 500))
         self.assertEqual(display_item.graphic_selection.indexes, set(
             (1, )))
Exemplo n.º 6
0
 def test_specific_parts_take_priority_over_all_part(self):
     # setup
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         display_panel = document_controller.selected_display_panel
         data_item = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_panel.set_display_panel_display_item(display_item)
         header_height = display_panel.header_canvas_item.header_height
         display_panel.root_container.layout_immediate(
             (1000 + header_height, 1000))
         # run test
         rect_region = Graphics.RectangleGraphic()
         rect_region.bounds = (0.25, 0.25), (0.5, 0.5)
         line_region = Graphics.LineGraphic()
         line_region.start = (0.5, 0.5)
         line_region.end = (0.5, 1.0)
         # draws line, then rect
         display_item.add_graphic(line_region)
         display_item.add_graphic(rect_region)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         # clicking on line should select it
         display_panel.display_canvas_item.simulate_click((500, 600))
         self.assertEqual(display_item.graphic_selection.indexes, set(
             (0, )))
Exemplo n.º 7
0
 def test_removing_graphic_as_connection_target_results_in_consistent_state(
         self):
     with TestContext.create_memory_context() as test_context:
         document_model = test_context.create_document_model()
         data_item1 = DataItem.DataItem(numpy.zeros((20, )))
         data_item2 = DataItem.DataItem(numpy.zeros((20, )))
         document_model.append_data_item(data_item1)
         document_model.append_data_item(data_item2)
         display_item1 = document_model.get_display_item_for_data_item(
             data_item1)
         display_item2 = document_model.get_display_item_for_data_item(
             data_item2)
         display_item1.add_graphic(Graphics.IntervalGraphic())
         display_item2.add_graphic(Graphics.IntervalGraphic())
         graphic1 = display_item1.graphics[0]
         graphic2 = display_item2.graphics[0]
         document_model.append_connection(
             Connection.PropertyConnection(graphic1,
                                           "interval",
                                           graphic2,
                                           "interval",
                                           parent=data_item1))
         display_item1.remove_graphic(graphic2).close()
         # the document must have a consistent state for item transaction to work
         with document_model.item_transaction(data_item1):
             pass
         with document_model.item_transaction(data_item2):
             pass
Exemplo n.º 8
0
 def test_selected_item_takes_priority_over_all_part(self):
     # setup
     document_model = DocumentModel.DocumentModel()
     document_controller = DocumentController.DocumentController(
         self.app.ui, document_model, workspace_id="library")
     with contextlib.closing(document_controller):
         display_panel = document_controller.selected_display_panel
         data_item = DataItem.DataItem(numpy.zeros((10, 10)))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_panel.set_display_panel_display_item(display_item)
         header_height = display_panel.header_canvas_item.header_height
         display_panel.root_container.layout_immediate(
             (1000 + header_height, 1000))
         # run test
         rect_region = Graphics.RectangleGraphic()
         rect_region.bounds = (0.25, 0.25), (0.5, 0.5)
         line_region = Graphics.LineGraphic()
         line_region.start = (0.0, 1.0)
         line_region.end = (0.75, 0.25)
         # draws line, then rect
         display_item.add_graphic(line_region)
         display_item.add_graphic(rect_region)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_panel.display_canvas_item.simulate_click((50, 950))
         self.assertEqual(display_item.graphic_selection.indexes, set(
             (0, )))
         display_panel.display_canvas_item.simulate_click((500, 500))
         self.assertEqual(display_item.graphic_selection.indexes, set(
             (0, )))
Exemplo n.º 9
0
 def test_connection_establishes_transaction_on_parallel_source_connection(
         self):
     document_model = DocumentModel.DocumentModel()
     with contextlib.closing(document_model):
         data_item_src = DataItem.DataItem(numpy.zeros((1000, )))
         data_item_dst1 = DataItem.DataItem(numpy.zeros((1000, )))
         data_item_dst2 = DataItem.DataItem(numpy.zeros((1000, )))
         document_model.append_data_item(data_item_src)
         document_model.append_data_item(data_item_dst1)
         document_model.append_data_item(data_item_dst2)
         display_item_src = document_model.get_display_item_for_data_item(
             data_item_src)
         display_item_dst1 = document_model.get_display_item_for_data_item(
             data_item_dst1)
         display_item_dst2 = document_model.get_display_item_for_data_item(
             data_item_dst2)
         interval_src = Graphics.IntervalGraphic()
         interval_dst1 = Graphics.IntervalGraphic()
         interval_dst2 = Graphics.IntervalGraphic()
         display_item_src.add_graphic(interval_src)
         display_item_dst1.add_graphic(interval_dst1)
         display_item_dst2.add_graphic(interval_dst2)
         connection1 = Connection.PropertyConnection(interval_src,
                                                     "interval",
                                                     interval_dst1,
                                                     "interval",
                                                     parent=data_item_dst1)
         connection2 = Connection.PropertyConnection(interval_src,
                                                     "interval",
                                                     interval_dst2,
                                                     "interval",
                                                     parent=data_item_dst2)
         document_model.append_connection(connection1)
         document_model.append_connection(connection2)
         # check dependencies
         with document_model.item_transaction(data_item_dst1):
             self.assertTrue(
                 document_model.is_in_transaction_state(data_item_dst1))
             self.assertTrue(
                 document_model.is_in_transaction_state(interval_dst1))
             self.assertTrue(
                 document_model.is_in_transaction_state(interval_src))
             self.assertTrue(
                 document_model.is_in_transaction_state(
                     display_item_dst2))  # from graphic
             self.assertTrue(
                 document_model.is_in_transaction_state(interval_dst2))
             self.assertTrue(
                 document_model.is_in_transaction_state(
                     display_item_src))  # from graphic
         self.assertEqual(0, document_model.transaction_count)
Exemplo n.º 10
0
 def test_connection_establishes_transaction_on_target_data_structure(self):
     with TestContext.create_memory_context() as test_context:
         document_model = test_context.create_document_model()
         data_item1 = DataItem.DataItem(numpy.zeros((2, 2)))
         data_item2 = DataItem.DataItem(numpy.zeros((2, 2)))
         document_model.append_data_item(data_item1)
         document_model.append_data_item(data_item2)
         display_item1 = document_model.get_display_item_for_data_item(
             data_item1)
         display_item2 = document_model.get_display_item_for_data_item(
             data_item2)
         interval1 = Graphics.IntervalGraphic()
         interval2 = Graphics.IntervalGraphic()
         display_item1.add_graphic(interval1)
         display_item2.add_graphic(interval2)
         data_struct1 = document_model.create_data_structure()
         data_struct2 = document_model.create_data_structure()
         data_struct1.set_property_value("x_interval", (0.5, 0.1))
         data_struct2.set_property_value("x_interval", (0.5, 0.2))
         document_model.append_data_structure(data_struct1)
         document_model.append_data_structure(data_struct2)
         connection1 = Connection.PropertyConnection(data_struct1,
                                                     "x_interval",
                                                     interval1,
                                                     "interval",
                                                     parent=data_item1)
         connection2 = Connection.PropertyConnection(interval2,
                                                     "interval",
                                                     data_struct2,
                                                     "x_interval",
                                                     parent=data_item2)
         document_model.append_connection(connection1)
         document_model.append_connection(connection2)
         with document_model.item_transaction(data_item1):
             self.assertTrue(
                 document_model.is_in_transaction_state(data_item1))
             self.assertTrue(
                 document_model.is_in_transaction_state(display_item1))
             self.assertTrue(
                 document_model.is_in_transaction_state(data_struct1))
         with document_model.item_transaction(data_item2):
             self.assertTrue(
                 document_model.is_in_transaction_state(data_item2))
             self.assertTrue(
                 document_model.is_in_transaction_state(display_item2))
             self.assertTrue(
                 document_model.is_in_transaction_state(data_struct2))
         self.assertEqual(0, document_model.transaction_count)
Exemplo n.º 11
0
    def show_probe_graphic(self):
        if not self.graphic:
            self.graphic = Graphics.PointGraphic()
            self.graphic.graphic_id = "probe"
            self.graphic.label = _("Probe")
            self.graphic.position = self.probe_position_value.value
            self.graphic.is_bounds_constrained = True
            self.display.add_graphic(self.graphic)
            self.binding = PropertyToGraphicBinding(self.probe_position_value,
                                                    "value", self.graphic,
                                                    "position")

            def graphic_removed():
                self.hide_probe_graphic()
                # next make sure all other probe graphics get hidden so that setting the probe_position_value
                # doesn't set graphics positions to None
                self.hide_probe_graphics_fn()
                self.probe_position_value.value = None

            def display_removed():
                self.hide_probe_graphic()

            self.remove_region_graphic_event_listener = self.graphic.about_to_be_removed_event.listen(
                graphic_removed)
            self.display_about_to_be_removed_listener = self.display.about_to_be_removed_event.listen(
                display_removed)
Exemplo n.º 12
0
    def test_target_region_stream_stops_updates_when_region_deselected(self):
        target_display_item_stream = HistogramPanel.TargetDisplayItemStream(
            self.document_controller).add_ref()
        target_region_stream = HistogramPanel.TargetRegionStream(
            target_display_item_stream).add_ref()
        try:
            count = 0

            def new_region(graphic: Graphics.Graphic) -> None:
                nonlocal count
                count += 1

            with contextlib.closing(
                    target_region_stream.value_stream.listen(
                        new_region)) as listener:
                rect_region = Graphics.RectangleGraphic()
                rect_region.bounds = (0.2, 0.2), (0.2, 0.2)
                self.display_item.add_graphic(rect_region)
                self.display_item.graphic_selection.set(0)  # count 1
                rect_region.bounds = (0.2, 0.2), (0.2, 0.2)  # count 2
                self.display_item.graphic_selection.clear()  # count 2
                count0 = count
                rect_region.bounds = (0.2, 0.2), (0.2, 0.2)  # count 2
                rect_region.bounds = (0.2, 0.2), (0.2, 0.2)  # count 2
                rect_region.bounds = (0.2, 0.2), (0.2, 0.2)  # count 2
                self.assertEqual(count0, count)

        finally:
            target_region_stream.remove_ref()
            target_display_item_stream.remove_ref()
Exemplo n.º 13
0
 def _create_graphic(self) -> Graphics.LineGraphic:
     line_scan_graphic = Graphics.LineGraphic()
     line_scan_graphic.graphic_id = "line_scan"
     line_scan_graphic.label = _("Line Scan")
     line_scan_graphic.vector = self.__stem_controller.line_scan_vector
     line_scan_graphic.is_bounds_constrained = True
     return line_scan_graphic
 def test_background_subtraction_computation_is_removed_when_background_removed(
         self):
     with TestContext.create_memory_context() as profile_context:
         document_controller = profile_context.create_document_controller_with_application(
         )
         document_model = document_controller.document_model
         data_item = self.__create_spectrum()
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         interval = Graphics.IntervalGraphic()
         interval.start = 0.2
         interval.end = 0.3
         display_item.add_graphic(interval)
         api = Facade.get_api("~1.0", "~1.0")
         library = api.library
         api_data_item = library.data_items[0]
         api_display_item = api_data_item.display
         api_intervals = copy.copy(api_display_item.graphics)
         BackgroundSubtraction.add_background_subtraction_computation(
             api, library, api_display_item, api_data_item, api_intervals)
         self.assertEqual(3, len(document_model.data_items))
         self.assertEqual(3, len(document_model.display_items))
         self.assertEqual(3, len(display_item.data_items))
         self.assertEqual(3, len(display_item.display_layers))
         self.assertEqual(1, len(document_model.data_structures))
         self.assertEqual(1, len(document_model.computations))
         document_model.remove_data_item(document_model.data_items[-2])
         self.assertEqual(1, len(document_model.data_items))
         self.assertEqual(1, len(document_model.display_items))
         self.assertEqual(0, len(document_model.data_structures))
         self.assertEqual(0, len(document_model.computations))
Exemplo n.º 15
0
    def test_changing_graphic_does_not_notify_display_values_change(self):
        with TestContext.create_memory_context() as test_context:
            document_model = test_context.create_document_model()
            # this is used to update the inspector
            data_item = DataItem.DataItem(numpy.zeros((4, 4)))
            document_model.append_data_item(data_item)
            display_item = document_model.get_display_item_for_data_item(
                data_item)
            graphic = Graphics.RectangleGraphic()
            display_item.add_graphic(graphic)
            display_data_channel = display_item.display_data_channels[0]

            class Observer:
                def __init__(self) -> None:
                    self.count = 0

                def next_calculated_display_values(self):
                    self.count += 1

            o = Observer()
            with contextlib.closing(
                    display_data_channel.
                    add_calculated_display_values_listener(
                        o.next_calculated_display_values)):
                display_data_channel.get_calculated_display_values()
                self.assertEqual(
                    1, o.count)  # 1 will be sent when adding the listener
                with display_item.display_item_changes():
                    graphic.bounds = ((0, 0), (1, 1))
                self.assertEqual(
                    1, o.count)  # 1 will be sent when adding the listener
Exemplo n.º 16
0
        def add_line_profile(data_item,
                             document_controller,
                             display_panel_id,
                             midpoint=0.5,
                             integration_width=.25):
            logging.debug("midpoint: {:.4f}".format(midpoint))
            logging.debug("width: {:.4f}".format(integration_width))

            # next, line profile through center of crop
            # please don't copy this bad example code!
            crop_region = Graphics.RectangleGraphic()
            crop_region.center = (midpoint, 0.5)
            crop_region.size = (integration_width, 1)
            crop_region.is_bounds_constrained = True
            display_specifier = DataItem.DisplaySpecifier.from_data_item(
                data_item)
            display_specifier.display.add_graphic(crop_region)
            eels_data_item = document_controller.document_model.get_projection_new(
                data_item, crop_region)
            if eels_data_item:
                eels_data_item.title = _("EELS Summed")
                document_controller.display_data_item(
                    DataItem.DisplaySpecifier.from_data_item(eels_data_item))

            document_controller.workspace_controller.display_data_item_in_display_panel(
                eels_data_item, display_panel_id)
Exemplo n.º 17
0
 def test_histogram_updates_when_crop_region_changes(self):
     data = numpy.zeros((100, 100))
     data[20:40, 20:40] = 1
     data[40:60, 40:60] = 2
     self.display_item.data_item.set_data(data)
     self.histogram_panel._statistics_widget._statistics_func_value_model._run_until_complete(
     )
     stats1_text = self.histogram_panel._statistics_widget._stats1_property.value
     stats2_text = self.histogram_panel._statistics_widget._stats2_property.value
     rect_region = Graphics.RectangleGraphic()
     rect_region.bounds = (0.2, 0.2), (0.2, 0.2)
     self.display_item.add_graphic(rect_region)
     self.display_item.graphic_selection.set(0)
     self.histogram_panel._statistics_widget._statistics_func_value_model._run_until_complete(
     )
     stats1_new_text = self.histogram_panel._statistics_widget._stats1_property.value
     stats2_new_text = self.histogram_panel._statistics_widget._stats2_property.value
     self.assertNotEqual(stats1_text, stats1_new_text)
     self.assertNotEqual(stats2_text, stats2_new_text)
     rect_region.bounds = (0.4, 0.4), (0.2, 0.2)
     self.histogram_panel._statistics_widget._statistics_func_value_model._run_until_complete(
     )
     self.assertNotEqual(
         stats1_new_text,
         self.histogram_panel._statistics_widget._stats1_property.value)
     self.assertNotEqual(
         stats2_new_text,
         self.histogram_panel._statistics_widget._stats2_property.value)
Exemplo n.º 18
0
 def test_cursor_over_4d_data_displays_correctly(self):
     document_model = DocumentModel.DocumentModel()
     document_controller = DocumentController.DocumentController(
         self.app.ui, document_model, workspace_id="library")
     with contextlib.closing(document_controller):
         display_panel = document_controller.selected_display_panel
         data = (numpy.random.randn(100, 100, 20, 20) * 100).astype(
             numpy.int32)
         data_item = DataItem.DataItem(data)
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_item.calibration_style_id = "pixels-top-left"
         display_item.display_data_channels[0].collection_index = 20, 30
         display_panel.set_display_panel_display_item(display_item)
         header_height = display_panel.header_canvas_item.header_height
         info_panel = document_controller.find_dock_panel("info-panel")
         display_panel.root_container.layout_immediate(
             (1000 + header_height, 1000))
         display_panel.display_canvas_item.mouse_entered()
         display_panel.display_canvas_item.mouse_position_changed(
             400, 600, Graphics.NullModifiers())
         document_controller.periodic()
         self.assertEqual(info_panel.label_row_1.text,
                          "Position: 8.0, 12.0, 30.0, 20.0")
         self.assertEqual(info_panel.label_row_2.text,
                          "Value: {}".format(data[20, 30, 12, 8]))
         self.assertIsNone(info_panel.label_row_3.text, None)
         display_panel.display_canvas_item.mouse_exited()
Exemplo n.º 19
0
 def test_cursor_over_3d_data_displays_correct_ordering_of_indices(self):
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         display_panel = document_controller.selected_display_panel
         data_item = DataItem.DataItem(numpy.ones((100, 100, 20)))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_item.calibration_style_id = "pixels-top-left"
         display_panel.set_display_panel_display_item(display_item)
         header_height = display_panel.header_canvas_item.header_height
         info_panel = document_controller.find_dock_panel("info-panel")
         display_panel.root_container.layout_immediate(
             (1000 + header_height, 1000))
         display_panel.display_canvas_item.mouse_entered()
         display_panel.display_canvas_item.mouse_position_changed(
             500, 500, Graphics.NullModifiers())
         self.assertTrue(
             self.__wait_for_cursor_position_text(
                 document_controller, info_panel,
                 "Position: 0.0, 50.0, 50.0"))
         self.assertEqual(info_panel.label_row_2.text, "Value: 1")
         self.assertIsNone(info_panel.label_row_3.text, None)
         display_panel.display_canvas_item.mouse_exited()
 def test_nudge_interval(self):
     with TestContext.create_memory_context() as test_context:
         document_controller = test_context.create_document_controller()
         document_model = document_controller.document_model
         display_panel = document_controller.selected_display_panel
         data_item = DataItem.DataItem(numpy.zeros((100, )))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         region = Graphics.IntervalGraphic()
         region.start = 0.1
         region.end = 0.9
         display_item.add_graphic(region)
         display_panel.set_display_panel_display_item(display_item)
         display_panel.display_canvas_item.layout_immediate((640, 480))
         display_panel.display_canvas_item.prepare_display()  # force layout
         # test
         document_controller.tool_mode = "pointer"
         display_panel.display_canvas_item.simulate_click((240, 320))
         display_panel.display_canvas_item.key_pressed(
             self.app.ui.create_key_by_id("left"))
         interval_region = display_item.graphics[0]
         self.assertTrue(interval_region.start < 0.1)
         self.assertTrue(interval_region.end < 0.9)
         self.assertAlmostEqual(interval_region.end - interval_region.start,
                                0.8)
Exemplo n.º 21
0
 def test_cursor_over_2d_data_sequence_displays_correct_ordering_of_indices(
         self):
     document_model = DocumentModel.DocumentModel()
     document_controller = DocumentController.DocumentController(
         self.app.ui, document_model, workspace_id="library")
     with contextlib.closing(document_controller):
         display_panel = document_controller.selected_display_panel
         data_and_metadata = DataAndMetadata.new_data_and_metadata(
             numpy.ones((20, 100, 100), numpy.float64),
             data_descriptor=DataAndMetadata.DataDescriptor(True, 0, 2))
         data_item = DataItem.new_data_item(data_and_metadata)
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         display_item.display_data_channels[0].sequence_index = 4
         display_item.calibration_style_id = "pixels-top-left"
         display_panel.set_display_panel_display_item(display_item)
         header_height = display_panel.header_canvas_item.header_height
         info_panel = document_controller.find_dock_panel("info-panel")
         display_panel.root_container.layout_immediate(
             (1000 + header_height, 1000))
         display_panel.display_canvas_item.mouse_entered()
         document_controller.periodic()
         display_panel.display_canvas_item.mouse_position_changed(
             500, 500, Graphics.NullModifiers())
         document_controller.periodic()
         self.assertEqual(info_panel.label_row_1.text,
                          "Position: 50.0, 50.0, 4.0")
         self.assertEqual(info_panel.label_row_2.text, "Value: 1")
         self.assertIsNone(info_panel.label_row_3.text, None)
         display_panel.display_canvas_item.mouse_exited()
Exemplo n.º 22
0
 def test_connection_updates_target_when_source_changes(self):
     # setup document model
     document_model = DocumentModel.DocumentModel()
     with contextlib.closing(document_model):
         data_item_3d = DataItem.DataItem(
             numpy.zeros((8, 8, 32), numpy.uint32))
         data_item_1d = DataItem.DataItem(numpy.zeros((32, ), numpy.uint32))
         document_model.append_data_item(data_item_3d)
         document_model.append_data_item(data_item_1d)
         display_item_1d = document_model.get_display_item_for_data_item(
             data_item_1d)
         display_item_3d = document_model.get_display_item_for_data_item(
             data_item_1d)
         interval = Graphics.IntervalGraphic()
         display_item_1d.add_graphic(interval)
         connection = Connection.PropertyConnection(
             display_item_3d.display_data_channels[0],
             "slice_center",
             interval,
             "start",
             parent=data_item_1d)
         document_model.append_connection(connection)
         # test to see if connection updates target when source changes
         display_item_3d.display_data_channels[0].slice_center = 12
         self.assertEqual(interval.start, 12)
Exemplo n.º 23
0
 def test_connection_updates_source_when_target_changes(self):
     # setup document model
     with TestContext.create_memory_context() as test_context:
         document_model = test_context.create_document_model()
         data_item_3d = DataItem.DataItem(
             numpy.zeros((8, 8, 32), numpy.uint32))
         data_item_1d = DataItem.DataItem(numpy.zeros((32, ), numpy.uint32))
         document_model.append_data_item(data_item_3d)
         document_model.append_data_item(data_item_1d)
         display_item_1d = document_model.get_display_item_for_data_item(
             data_item_1d)
         display_item_3d = document_model.get_display_item_for_data_item(
             data_item_1d)
         interval = Graphics.IntervalGraphic()
         display_item_1d.add_graphic(interval)
         display_data_channel_3d = display_item_3d.display_data_channels[0]
         connection = Connection.PropertyConnection(display_data_channel_3d,
                                                    "slice_center",
                                                    interval,
                                                    "start",
                                                    parent=data_item_1d)
         document_model.append_connection(connection)
         # test to see if connection updates target when source changes
         interval.start = 9
         self.assertEqual(display_data_channel_3d.slice_center, 9)
Exemplo n.º 24
0
 def test_connection_to_graphic_puts_data_item_under_transaction(self):
     with TestContext.create_memory_context() as test_context:
         document_model = test_context.create_document_model()
         data_item = DataItem.DataItem(numpy.zeros((20, )))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(
             data_item)
         interval = Graphics.IntervalGraphic()
         display_item.add_graphic(interval)
         data_struct = document_model.create_data_structure()
         data_struct.set_property_value("x_interval", (0.5, 0.1))
         document_model.append_data_structure(data_struct)
         connection = Connection.PropertyConnection(data_struct,
                                                    "x_interval",
                                                    interval,
                                                    "interval",
                                                    parent=data_item)
         document_model.append_connection(connection)
         with document_model.item_transaction(data_struct):
             self.assertTrue(
                 document_model.is_in_transaction_state(data_struct))
             self.assertTrue(
                 document_model.is_in_transaction_state(interval))
             self.assertTrue(
                 document_model.is_in_transaction_state(display_item))
Exemplo n.º 25
0
 def _create_graphic(self) -> Graphics.PointGraphic:
     graphic = Graphics.PointGraphic()
     graphic.graphic_id = "probe"
     graphic.label = _("Probe")
     graphic.position = self.__stem_controller.probe_position
     graphic.is_bounds_constrained = True
     graphic.color = "#F80"
     return graphic
Exemplo n.º 26
0
 def _create_graphic(self) -> Graphics.RectangleGraphic:
     subscan_graphic = Graphics.RectangleGraphic()
     subscan_graphic.graphic_id = "subscan"
     subscan_graphic.label = _("Subscan")
     subscan_graphic.bounds = tuple(typing.cast(Geometry.FloatRect, self.__stem_controller.subscan_region))
     subscan_graphic.rotation = self.__stem_controller.subscan_rotation
     subscan_graphic.is_bounds_constrained = True
     return subscan_graphic
Exemplo n.º 27
0
 def test_region_mask_wedge(self):
     rect_graphic = Graphics.WedgeGraphic()
     rect_graphic.angle_interval = -math.pi / 2, 0
     mask = rect_graphic.get_mask((1000, 1000))
     self.assertTrue(mask.data[600, 600])  # bottom right
     self.assertFalse(mask.data[600, 400])  # top right
     self.assertTrue(mask.data[400, 400])  # top left
     self.assertFalse(mask.data[400, 600])  # bottom left
Exemplo n.º 28
0
 def test_histogram_statistics_with_zero_array(self):
     self.display_item.data_item.set_data(
         numpy.ones((10, 10), dtype=numpy.uint32))
     rect_region = Graphics.RectangleGraphic()
     rect_region.bounds = (10000, 10000), (1, 1)
     self.display_item.add_graphic(rect_region)
     self.display_item.graphic_selection.set(0)
     self.histogram_panel._histogram_widget._recompute()
Exemplo n.º 29
0
 def test_region_mask_wedge(self):
     wedge_graphic = Graphics.WedgeGraphic()
     with contextlib.closing(wedge_graphic):
         wedge_graphic.angle_interval = -math.pi / 2, 0
         mask = wedge_graphic.get_mask((1000, 1000))
         self.assertTrue(mask.data[600, 600])  # bottom right
         self.assertFalse(mask.data[600, 400])  # top right
         self.assertTrue(mask.data[400, 400])  # top left
         self.assertFalse(mask.data[400, 600])  # bottom left
Exemplo n.º 30
0
    async def __update_subscan_region(self):
        subscan_region = self.__update_subscan_region_value
        with self.__last_data_items_lock:
            scan_data_items = self.__scan_data_items
        if subscan_region:
            # create subscan graphics for each scan data item if it doesn't exist
            if not self.__subscan_graphic_trackers:
                for scan_data_item in scan_data_items:
                    display_item = self.__document_model.get_display_item_for_data_item(
                        scan_data_item)
                    if display_item:
                        subscan_graphic = Graphics.RectangleGraphic()
                        subscan_graphic.graphic_id = "subscan"
                        subscan_graphic.label = _("Subscan")
                        subscan_graphic.bounds = subscan_region
                        subscan_graphic.is_bounds_constrained = True

                        def subscan_graphic_property_changed(
                                subscan_graphic, name):
                            if name == "bounds":
                                self.__subscan_region_value.value = subscan_graphic.bounds

                        subscan_graphic_property_changed_listener = subscan_graphic.property_changed_event.listen(
                            functools.partial(subscan_graphic_property_changed,
                                              subscan_graphic))

                        def graphic_removed(subscan_graphic):
                            self.__remove_one_subscan_graphic(subscan_graphic)
                            self.__subscan_state_model.value = SubscanState.DISABLED
                            self.__subscan_region_value.value = None

                        def display_removed(subscan_graphic):
                            self.__remove_one_subscan_graphic(subscan_graphic)

                        remove_region_graphic_event_listener = subscan_graphic.about_to_be_removed_event.listen(
                            functools.partial(graphic_removed,
                                              subscan_graphic))
                        display_about_to_be_removed_listener = display_item.about_to_be_removed_event.listen(
                            functools.partial(display_removed,
                                              subscan_graphic))
                        self.__subscan_graphic_trackers.append(
                            (subscan_graphic,
                             subscan_graphic_property_changed_listener,
                             remove_region_graphic_event_listener,
                             display_about_to_be_removed_listener))
                        display_item.add_graphic(subscan_graphic)
            # apply new value to any existing subscan graphics
            for subscan_graphic, l1, l2, l3 in self.__subscan_graphic_trackers:
                subscan_graphic.bounds = subscan_region
        else:
            # remove any graphics
            for subscan_graphic, subscan_graphic_property_changed_listener, remove_region_graphic_event_listener, display_about_to_be_removed_listener in self.__subscan_graphic_trackers:
                subscan_graphic_property_changed_listener.close()
                remove_region_graphic_event_listener.close()
                display_about_to_be_removed_listener.close()
                subscan_graphic.container.remove_graphic(subscan_graphic)
            self.__subscan_graphic_trackers = list()