def test_dimension_failure(array, dimension): message_expected = "The desired dimension cannot be less than the current dimension." points = Points(array) with pytest.raises(ValueError, match=message_expected): points.set_dimension(dimension)
def test_from_points(arrays): points = Points(arrays) assume(not points.are_collinear(tol=1)) # The plane must contain each point. plane = Plane.from_points(*points) points = points.set_dimension(plane.dimension) for point in points: assert plane.contains_point(point, abs_tol=ATOL) # The plane of best fit should be the same # as the plane from three points. plane_fit = Plane.best_fit(points) assert plane_fit.is_close(plane, abs_tol=ATOL)
def test_best_fit_plane(data): n_points = data.draw(st.integers(min_value=3, max_value=5)) points = Points([data.draw(arrays_fixed(3)) for _ in range(n_points)]) assume(not points.are_collinear(tol=ATOL)) plane_fit = Plane.best_fit(points) # The best fit plane could have a higher dimension than the points # (e.g., 2D points have a 3D plane of best fit). # So, we convert the points dimension to that of the best fit plane. dim_fit = plane_fit.dimension points = points.set_dimension(dim_fit) plane = data.draw(planes(dim_fit)) error_plane = plane.sum_squares(points) error_fit = plane_fit.sum_squares(points) assert error_fit <= error_plane + ATOL