def test_display_limits_are_reasonable_when_using_log_scale(self):

        test_ranges = (((-0.1, 11.0), (0.0, 100.0)), ((1000.0, 1100.0),
                                                      (998.85, 1122.02)),
                       ((1.0, 2.0), (0.99, 2.0)), ((3.0, 4.0), (2.98, 5.01)),
                       ((2.0, 2.1), (2.0, 2.14)), ((0.0, 5.0), (0.05, 5.0)))

        for data_in, data_out in test_ranges:
            with self.subTest(data_in=data_in, data_out=data_out):
                data = numpy.linspace(data_in[0],
                                      data_in[1],
                                      100,
                                      endpoint=False)
                data_style = "log"
                calibrated_data_min, calibrated_data_max, y_ticker = LineGraphCanvasItem.calculate_y_axis(
                    [data], None, None, None, data_style)
                axes = LineGraphCanvasItem.LineGraphAxes(1.0,
                                                         calibrated_data_min,
                                                         calibrated_data_max,
                                                         data_style=data_style,
                                                         y_ticker=y_ticker)
                self.assertAlmostEqual(axes.uncalibrated_data_min,
                                       data_out[0],
                                       places=1)
                self.assertAlmostEqual(axes.uncalibrated_data_max,
                                       data_out[1],
                                       places=1)
                calibrated_data = axes.calculate_calibrated_xdata(
                    DataAndMetadata.new_data_and_metadata(data)).data
                data[data <= 0] = numpy.nan
                self.assertAlmostEqual(numpy.nanmin(calibrated_data),
                                       math.log10(numpy.nanmin(data)))
                self.assertAlmostEqual(numpy.nanmax(calibrated_data),
                                       math.log10(numpy.nanmax(data)))
 def test_narrow_line_plot_with_nans_is_drawn_properly(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 = numpy.random.rand(200)
         data[0] = numpy.nan
         data_item = DataItem.DataItem(data)
         data_item.set_xdata(DataAndMetadata.new_data_and_metadata(data))
         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)
         display_panel.display_canvas_item.layout_immediate((100, 480))
         axes = display_panel.display_canvas_item._axes
         drawing_context = DrawingContext.DrawingContext()
         calibrated_data_min = axes.calibrated_data_min
         calibrated_data_max = axes.calibrated_data_max
         calibrated_data_range = calibrated_data_max - calibrated_data_min
         display_xdata = display_panel.display_canvas_item.line_graph_canvas_item.calibrated_xdata
         LineGraphCanvasItem.draw_line_graph(
             drawing_context, 480, 100, 0, 0, display_xdata,
             calibrated_data_min, calibrated_data_range,
             axes.calibrated_left_channel, axes.calibrated_right_channel,
             axes.x_calibration, "black", "black", None, axes.data_style)
         # ensure that the drawing commands are sufficiently populated to have drawn the graph
         self.assertGreater(len(drawing_context.commands), 100)
 def test_line_plot_handle_calibrated_x_axis_with_negative_scale(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 = numpy.random.randn(100)
         data_item = DataItem.DataItem(data)
         data_item.set_xdata(
             DataAndMetadata.new_data_and_metadata(
                 data,
                 dimensional_calibrations=[
                     Calibration.Calibration(0, -1.0, "e")
                 ]))
         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)
         display_panel.display_canvas_item.layout_immediate((640, 480))
         axes = display_panel.display_canvas_item._axes
         drawing_context = DrawingContext.DrawingContext()
         calibrated_data_min = axes.calibrated_data_min
         calibrated_data_max = axes.calibrated_data_max
         calibrated_data_range = calibrated_data_max - calibrated_data_min
         LineGraphCanvasItem.draw_line_graph(
             drawing_context, 480, 640, 0, 0, data_item.xdata,
             calibrated_data_min, calibrated_data_range,
             axes.calibrated_left_channel, axes.calibrated_right_channel,
             axes.x_calibration, "black", "black", None, axes.data_style)
         # ensure that the drawing commands are sufficiently populated to have drawn the graph
         self.assertGreater(len(drawing_context.commands), 100)
Esempio n. 4
0
 def test_display_limits_are_reasonable_when_using_log_scale(self):
     data = numpy.linspace(-0.1, 10.0, 10)
     data_style = "log"
     calibrated_data_min, calibrated_data_max, y_ticker = LineGraphCanvasItem.calculate_y_axis(
         [data], None, None, None, data_style)
     axes = LineGraphCanvasItem.LineGraphAxes(1.0,
                                              calibrated_data_min,
                                              calibrated_data_max,
                                              data_style=data_style,
                                              y_ticker=y_ticker)
     self.assertAlmostEqual(axes.uncalibrated_data_min, 1.0)
     self.assertAlmostEqual(axes.uncalibrated_data_max, 10.0)
     calibrated_data = axes.calculate_calibrated_xdata(
         DataAndMetadata.new_data_and_metadata(data)).data
     self.assertAlmostEqual(numpy.amin(calibrated_data), math.log10(1.0))
     self.assertAlmostEqual(numpy.amax(calibrated_data), math.log10(10.0))
    def test_data_values_give_pretty_limits_when_auto(self):

        test_ranges = (
            ((7.46, 85.36), (0.0, 100.0)),
            ((7.67, 12.95), (0.0, 15.0)),
            ((6.67, 11.95), (0.0, 15.0)),
            ((0.00, 0.00), (-1.0, 1.0))
        )

        for data_in, data_out in test_ranges:
            data_min, data_max = data_in
            expected_uncalibrated_data_min, expected_uncalibrated_data_max = data_out
            data = numpy.zeros((16, 16), dtype=numpy.float64)
            irow, icol = numpy.ogrid[0:16, 0:16]
            data[:] = data_min + (data_max - data_min) * (irow / 15.0)
            # auto on min/max
            calibrated_data_min, calibrated_data_max, y_ticker = LineGraphCanvasItem.calculate_y_axis([data], None, None, None, None)
            axes = LineGraphCanvasItem.LineGraphAxes(1.0, calibrated_data_min, calibrated_data_max, y_ticker=y_ticker)
            self.assertEqual(axes.uncalibrated_data_min, expected_uncalibrated_data_min)
            self.assertEqual(axes.uncalibrated_data_max, expected_uncalibrated_data_max)
Esempio n. 6
0
 def test_display_limits_are_reasonable_when_using_calibrated_log_scale(
         self):
     intensity_calibration = Calibration.Calibration(-5, 2)
     data = numpy.linspace(-0.1, 10.0, 10)
     data_style = "log"
     calibrated_data_min, calibrated_data_max, y_ticker = LineGraphCanvasItem.calculate_y_axis(
         [data], None, None, intensity_calibration, data_style)
     axes = LineGraphCanvasItem.LineGraphAxes(
         1.0,
         calibrated_data_min,
         calibrated_data_max,
         y_calibration=intensity_calibration,
         data_style=data_style,
         y_ticker=y_ticker)
     self.assertAlmostEqual(axes.calibrated_data_min, 0.0)
     self.assertAlmostEqual(axes.calibrated_data_max,
                            1.5)  # empirically mesaured
     calibrated_data = axes.calculate_calibrated_xdata(
         DataAndMetadata.new_data_and_metadata(data)).data
     self.assertAlmostEqual(numpy.amin(calibrated_data), math.log10(1.0))
     self.assertAlmostEqual(numpy.amax(calibrated_data), math.log10(15.0))
 def test_check_exponents(self):
     e = LineGraphCanvasItem.Exponenter()
     e.add_label("5e+05")
     e.add_label("6e+05")
     self.assertEqual(("5 x 10", "5"), e.used_labels("5e+05"))
     self.assertEqual(("6 x 10", "5"), e.used_labels("6e+05"))
     e = LineGraphCanvasItem.Exponenter()
     e.add_label("5e+00")
     e.add_label("6e+00")
     self.assertEqual(("5", ""), e.used_labels("5e+00"))
     self.assertEqual(("6", ""), e.used_labels("6e+00"))
     e = LineGraphCanvasItem.Exponenter()
     e.add_label("5e+00")
     e.add_label("6e+05")
     self.assertEqual(("5 x 10", "0"), e.used_labels("5e+00"))
     self.assertEqual(("6 x 10", "5"), e.used_labels("6e+05"))
     e = LineGraphCanvasItem.Exponenter()
     e.add_label("1e+02")
     e.add_label("1e+05")
     self.assertEqual(("10", "2"), e.used_labels("1e+02"))
     self.assertEqual(("10", "5"), e.used_labels("1e+05"))
     e = LineGraphCanvasItem.Exponenter()
     e.add_label("5e-02")
     e.add_label("5e+00")
     self.assertEqual(("5 x 10", "-2"), e.used_labels("5e-02"))
     self.assertEqual(("5 x 10", "0"), e.used_labels("5e+00"))
     e = LineGraphCanvasItem.Exponenter()
     e.add_label("1e-03")
     e.add_label("1e+03")
     self.assertEqual(("10", "-3"), e.used_labels("1e-03"))
     self.assertEqual(("10", "3"), e.used_labels("1e+03"))
 def test_line_plot_handles_data_below_one_in_log_scale(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.rand(100)
         data_item = DataItem.DataItem(data)
         data_item.set_xdata(DataAndMetadata.new_data_and_metadata(data))
         document_model.append_data_item(data_item)
         display_item = document_model.get_display_item_for_data_item(data_item)
         display_item.set_display_property("y_style", "log")
         display_panel.set_display_panel_display_item(display_item)
         display_panel.display_canvas_item.layout_immediate((640, 480))
         axes = display_panel.display_canvas_item._axes
         self.assertEqual(axes.data_style, "log")
         drawing_context = DrawingContext.DrawingContext()
         calibrated_data_min = axes.calibrated_data_min
         calibrated_data_max = axes.calibrated_data_max
         calibrated_data_range = calibrated_data_max - calibrated_data_min
         display_xdata = display_panel.display_canvas_item.line_graph_canvas_item.calibrated_xdata
         LineGraphCanvasItem.draw_line_graph(drawing_context, 480, 640, 0, 0, display_xdata, calibrated_data_min, calibrated_data_range, axes.calibrated_left_channel, axes.calibrated_right_channel, axes.x_calibration, "black", "black", None, axes.data_style)
         # ensure that the drawing commands are sufficiently populated to have drawn the graph
         self.assertGreater(len(drawing_context.commands), 100)