I think this is wrong for bounded support kernels, xs will have the points in the neighborhood, inDomain, weights needs to be "filtered" selected in the same way

in the kde case, I think we just use weights instead of ys (second xs) in self.inDomain(xs, weights, x)