code: def _surf_nearest(vertices, adj_mat):
      # Vertices can be out of order, so sort them to start ...
      order = np.argsort(vertices)
      vertices = vertices[order]
      _, _, sources = sparse.csgraph.dijkstra(
          adj_mat,
          False,
          indices=vertices,
          min_only=True,
          return_predecessors=True,
      )
      col = np.searchsorted(vertices, sources)
      # ... then get things back to the correct configuration.
      col = order[col]
      row = np.arange(len(col))
      data = np.ones(len(col))
      mat = sparse.coo_matrix((data, (row, col)))
      assert mat.shape == (adj_mat.shape[0], len(vertices)), mat.shape
      return mat
  
imports: import copy
  import os.path
  import warnings
  import numpy
  from scipy import sparse
  from .fixes import _get_img_fdata
  from .morph_map import read_morph_map
  from .parallel import parallel_func
  from .source_estimate import _BaseSourceEstimate, _BaseSurfaceSourceEstimate, _BaseVolSourceEstimate, _get_ico_tris
  from .source_space._source_space import SourceSpaces, _ensure_src, _grid_interp
  from .surface import _compute_nearest, mesh_edges, read_surface
  from .utils import BunchConst, ProgressBar, _check_fname, _check_option, _custom_lru_cache, _ensure_int, _import_h5io_funcs, _import_nibabel, _validate_type, check_version, fill_doc, get_subjects_dir, logger, use_log_level, verbose, warn
  from .utils import warn
label_desc: Use image node_id 17 for calling a global function with example usage: _surf_nearest(vertices, adj_mat) and returns: mat