'Returns the kernel smoothing estimate for point x based on x-values
xs and y-values ys.
Not expected to be called by the user.
Special implementation optimised for Gaussian.'

def smooth(self, xs, ys, x):

    w = np.sum(exp(multiply(square(divide(subtract(xs, x), self.h)), (-0.5))))
    v = np.sum(multiply(ys, exp(multiply(square(divide(subtract(xs, x), self.h)), (-0.5)))))
    return (v / w)
