code: def _call_plc_uniform_neighbor_sample(
      sID,
      mg_graph_x,
      st_x,
      keep_batches_together,
      n_workers,
      min_batch_id,
      max_batch_id,
      fanout_vals,
      with_replacement,
      weight_t,
      with_edge_properties,
      random_state=None,
      return_offsets=False,
      return_hops=True,
      prior_sources_behavior=None,
      deduplicate_sources=False,
      renumber=False,
      use_legacy_names=True,
      include_hop_column=True,
      compress_per_hop=False,
      compression="COO",
  ):
      st_x = st_x[0]
      start_list_x = st_x[start_col_name]
      batch_id_list_x = (
          st_x[batch_col_name] if batch_col_name in st_x else None
      )
  
      label_list = None
      label_to_output_comm_rank = None
      if keep_batches_together:
          label_list = cp.arange(
              min_batch_id, max_batch_id + 1, dtype="int32"
          )
          label_to_output_comm_rank = __get_label_to_output_comm_rank(
              min_batch_id, max_batch_id, n_workers
          )
  
      cupy_array_dict = pylibcugraph_uniform_neighbor_sample(
          resource_handle=ResourceHandle(
              Comms.get_handle(sID).getHandle()
          ),
          input_graph=mg_graph_x,
          start_list=start_list_x,
          label_list=label_list,
          label_to_output_comm_rank=label_to_output_comm_rank,
          h_fan_out=fanout_vals,
          with_replacement=with_replacement,
          do_expensive_check=False,
          with_edge_properties=with_edge_properties,
          batch_id_list=batch_id_list_x,
          random_state=random_state,
          prior_sources_behavior=prior_sources_behavior,
          deduplicate_sources=deduplicate_sources,
          return_hops=return_hops,
          renumber=renumber,
          compression=compression,
          compress_per_hop=compress_per_hop,
          return_dict=True,
      )
  
      # have to import here due to circular import issue
      from cugraph.sampling.sampling_utilities import (
          sampling_results_from_cupy_array_dict,
      )
  
      return sampling_results_from_cupy_array_dict(
          cupy_array_dict,
          weight_t,
          len(fanout_vals),
          with_edge_properties=with_edge_properties,
          return_offsets=return_offsets,
          renumber=renumber,
          use_legacy_names=use_legacy_names,
          include_hop_column=include_hop_column,
      )
  
imports: from __future__ import annotations
  import warnings
  import numpy
  from dask import delayed
  from dask.distributed import Lock, get_client, wait
  import dask_cudf
  import cudf
  import cupy
  from pylibcugraph import ResourceHandle
  from pylibcugraph import uniform_neighbor_sample
  from cugraph.dask.comms import comms
  from cugraph.dask import get_n_workers
  from typing import Sequence, List, Union, Tuple
  from typing import TYPE_CHECKING
  from cugraph.dask.common.part_utils import get_persisted_df_worker_map, persist_dask_df_equal_parts_per_worker
label_desc: Use image node_id 4 for calling a global function with example usage: _call_plc_uniform_neighbor_sample(sID, mg_graph_x, st_x, keep_batches_together, n_workers, min_batch_id, max_batch_id, fanout_vals, with_replacement, weight_t, with_edge_properties, random_state, return_offsets, return_hops, prior_sources_behavior, deduplicate_sources, renumber, use_legacy_names, include_hop_column, compress_per_hop, compression) and returns: sampling_results_from_cupy_array_dict