code: def check_angle_sampling(nvecs, angles):
      
  
      failed_nvecs = []
      failures = []
  
      for i, vec in enumerate(nvecs):
          # N = np.linalg.norm(vec)
          # X = np.dot(angles,vec)
          X = (angles*vec[:, None]).sum(axis=0)
          diff = float(np.abs(X.max() - X.min()))
  
          if diff < (2.*np.pi):
              warnings.warn("Need a longer integration window for mode {0}"
                            .format(vec))
              failed_nvecs.append(vec.tolist())
              # P.append(2.*np.pi - diff)
              failures.append(0)
  
          elif (diff/len(X)) > np.pi:
              warnings.warn("Need a finer sampling for mode {0}"
                            .format(str(vec)))
              failed_nvecs.append(vec.tolist())
              # P.append(np.pi - diff/len(X))
              failures.append(1)
  
      return np.array(failed_nvecs), np.array(failures)
docs: Returns a list of the index of elements of n which do not have adequate
      toy angle coverage. The criterion is that we must have at least one sample
      in each Nyquist box when we project the toy angles along the vector n.
  
      Parameters
      ----------
      nvecs : array_like
          Array of integer vectors.
      angles : array_like
          Array of angles.
  
      Returns
      -------
      failed_nvecs : :class:`numpy.ndarray`
          Array of all integer vectors that failed checks. Has shape (N,3).
      failures : :class:`numpy.ndarray`
          Array of flags that designate whether this failed needing a longer
          integration window (0) or finer sampling (1).