code: def with_inverse(points, noise):
      
      # 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
docs: 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`