<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def with_inverse(points, noise):
 """ Smooths a set of points It smooths them twice, once in given order, another one in the reverse order. The the first half of the results will be taken from the reverse order and the second half from the normal order. Args: points (:obj:`list` of :obj:`Point`) noise (float):
 Expected noise, the higher it is the more the path will be smoothed. Returns: :obj:`list` of :obj:`Point` """

    # noise_sample = 20
    n_points = len(points)/2
    break_point = n_points

    points_part = copy.deepcopy(points)
    points_part = list(reversed(points_part))
    part = kalman_filter(points_part, noise)
    total = kalman_filter(points, noise)

    result = list(reversed(part))[:break_point] + total[break_point:]
    result[break_point] = point_mean(part[break_point], total[break_point])

    return result