def test_regression_line(self): color = QColor(1, 2, 3) width = 42 # Normal line line = OWScatterPlotGraph._regression_line( np.array([0, 1, 1, 2]), np.array([0, 0, 2, 2]), color, width) self.assertEqual(line.pos().x(), 0) self.assertAlmostEqual(line.pos().y(), 0) self.assertEqual(line.angle, 45) self.assertEqual(line.pen.color(), color) self.assertEqual(line.pen.width(), width) # Normal line, negative slope line = OWScatterPlotGraph._regression_line( np.array([1, 2, 3]), np.array([3, 2, 1]), color, width) self.assertEqual(line.pos().x(), 1) self.assertEqual(line.pos().y(), 3) self.assertEqual(line.angle % 360, 315) # Horizontal line line = OWScatterPlotGraph._regression_line( np.array([10, 11, 12]), np.array([42, 42, 42]), color, width) self.assertEqual(line.pos().x(), 10) self.assertEqual(line.pos().y(), 42) self.assertEqual(line.angle, 0) # Vertical line line = OWScatterPlotGraph._regression_line( np.array([42, 42, 42]), np.array([10, 11, 12]), color, width) self.assertIsNone(line) # No line because all points coincide line = OWScatterPlotGraph._regression_line( np.array([1, 1, 1]), np.array([42, 42, 42]), color, width) self.assertIsNone(line)
def test_orthonormal_line(self): color = QColor(1, 2, 3) width = 42 # Normal line line = OWScatterPlotGraph._orthonormal_line(np.array([0, 1, 1, 2]), np.array([0, 0, 2, 2]), color, width) self.assertEqual(line.pos().x(), 0) self.assertAlmostEqual(line.pos().y(), -0.6180339887498949) self.assertAlmostEqual(line.angle, 58.28252558853899) self.assertEqual(line.pen.color(), color) self.assertEqual(line.pen.width(), width) # Normal line, negative slope line = OWScatterPlotGraph._orthonormal_line(np.array([1, 2, 3]), np.array([3, 2, 1]), color, width) self.assertEqual(line.pos().x(), 1) self.assertEqual(line.pos().y(), 3) self.assertEqual(line.angle % 360, 315) # Horizontal line line = OWScatterPlotGraph._orthonormal_line(np.array([10, 11, 12]), np.array([42, 42, 42]), color, width) self.assertEqual(line.pos().x(), 10) self.assertEqual(line.pos().y(), 42) self.assertEqual(line.angle, 0) # Vertical line line = OWScatterPlotGraph._orthonormal_line(np.array([42, 42, 42]), np.array([10, 11, 12]), color, width) self.assertEqual(line.pos().x(), 42) self.assertEqual(line.pos().y(), 10) self.assertEqual(line.angle, 90) # No line because all points coincide line = OWScatterPlotGraph._orthonormal_line(np.array([1, 1, 1]), np.array([42, 42, 42]), color, width) self.assertIsNone(line) # No line because the group is symmetric line = OWScatterPlotGraph._orthonormal_line(np.array([1, 1, 2, 2]), np.array([42, 5, 5, 42]), color, width) self.assertIsNone(line)