docs: def sample_vMF(mu, kappa, num_samples):
      """Generate num_samples N-dimensional samples from von Mises Fisher
      distribution around center mu \in R^N with concentration kappa.
      """
      dim = len(mu)
      result = np.zeros((num_samples, dim))
      for nn in range(num_samples):
          # sample offset from center (on sphere) with spread kappa
          w = _sample_weight(kappa, dim)
  
          # sample a point v on the unit sphere that's orthogonal to mu
          v = _sample_orthonormal_to(mu)
  
          # compute new point
          result[nn, :] = v * np.sqrt(1. - w ** 2) + w * mu
  
      return result