code: def _calculate_epsilon(X):
      
      disc_mask = _get_discrete_columns(X)
      if np.all(disc_mask):
          # if all discrete columns, there's no point getting epsilon
          return 0
      cont_features = X[:, ~disc_mask]
      nn = NearestNeighbors(metric='chebyshev', n_neighbors=NUM_NEIGHBORS)
      nn.fit(cont_features)
      distances, _ = nn.kneighbors()
      epsilon = np.nextafter(distances[:, -1], 0)
      return asarray2d(epsilon)
docs: Calculates epsilon, a subroutine for the Kraskov Estimator [1]
      Represents the chebyshev distance of each dataset element to its
      K-th nearest neighbor.
  
      Args:
          X (array-like): An array with shape (n_samples, n_features)
  
      Returns:
          array-like: An array with shape (n_samples, 1) representing
              epsilon as described above.
  
      References:
  
      .. [1] A. Kraskov, H. Stogbauer and P. Grassberger, "Estimating mutual
             information". Phys. Rev. E 69, 2004.