code: def smooth_knn_dist(distances, k, n_iter=64, local_connectivity=1.0, bandwidth=1.0):
      target = np.log2(k) * bandwidth
      rho = np.zeros(distances.shape[0])
      result = np.zeros(distances.shape[0])
      for i in range(distances.shape[0]):
          lo = 0.0
          hi = NPY_INFINITY
          mid = 1.0
          ith_distances = distances[i]
          non_zero_dists = ith_distances[ith_distances > 0.0]
          if non_zero_dists.shape[0] >= local_connectivity:
              index = int(np.floor(local_connectivity))
              interpolation = local_connectivity - index
              if index > 0:
                  rho[i] = non_zero_dists[index - 1]
                  if interpolation > SMOOTH_K_TOLERANCE:
                      rho[i] += interpolation * (non_zero_dists[index] - non_zero_dists[index - 1])
              else:
                  rho[i] = interpolation * non_zero_dists[0]
          elif non_zero_dists.shape[0] > 0:
              rho[i] = np.max(non_zero_dists)
          for n in range(n_iter):
              psum = 0.0
              for j in range(1, distances.shape[1]):
                  d = distances[i, j] - rho[i]
                  if d > 0:
                      psum += np.exp(-(d / mid))
                  else:
                      psum += 1.0
              if np.fabs(psum - target) < SMOOTH_K_TOLERANCE:
                  break
              if psum > target:
                  hi = mid
                  mid = (lo + hi) / 2.0
              else:
                  lo = mid
                  if hi == NPY_INFINITY:
                      mid *= 2
                  else:
                      mid = (lo + hi) / 2.0
          result[i] = mid
          if rho[i] > 0.0:
              if result[i] < MIN_K_DIST_SCALE * np.mean(ith_distances):
                  result[i] = MIN_K_DIST_SCALE * np.mean(ith_distances)
          else:
              if result[i] < MIN_K_DIST_SCALE * np.mean(distances):
                  result[i] = MIN_K_DIST_SCALE * np.mean(distances)
      return result, rho