code: def _normalize_index_columns(
      user_columns, data_columns, user_index, data_index
  ):
      """Normalize user and file-provided column and index names
  
      Parameters
      ----------
      user_columns : None, str or list of str
      data_columns : list of str
      user_index : None, str, or list of str
      data_index : list of str
  
      Returns
      -------
      column_names : list of str
      index_names : list of str
      """
      specified_columns = user_columns is not None
      specified_index = user_index is not None
  
      if user_columns is None:
          user_columns = list(data_columns)
      elif isinstance(user_columns, str):
          user_columns = [user_columns]
      else:
          user_columns = list(user_columns)
  
      if user_index is None:
          user_index = data_index
      elif user_index is False:
          # When index is False, use no index and all fields should be treated as
          # columns (unless `columns` provided).
          user_index = []
          data_columns = data_index + data_columns
      elif isinstance(user_index, str):
          user_index = [user_index]
      else:
          user_index = list(user_index)
  
      if specified_index and not specified_columns:
          # Only `index` provided. Use specified index, and all column fields
          # that weren't specified as indices
          index_names = user_index
          column_names = [
              x for x in data_columns if x not in index_names
          ]
      elif specified_columns and not specified_index:
          # Only `columns` provided. Use specified columns, and all index fields
          # that weren't specified as columns
          column_names = user_columns
          index_names = [x for x in data_index if x not in column_names]
      elif specified_index and specified_columns:
          # Both `index` and `columns` provided. Use as specified, but error if
          # they intersect.
          column_names = user_columns
          index_names = user_index
          if set(column_names).intersection(index_names):
              raise ValueError(
                  "Specified index and column names must not intersect"
              )
      else:
          # Use default columns and index from the metadata
          column_names = data_columns
          index_names = data_index
  
      return column_names, index_names
  
imports: from __future__ import annotations
  import re
  import warnings
  import numpy
  import pandas
  from fsspec.core import expand_paths_if_needed, get_fs_token_paths, stringify_path
  from fsspec.spec import AbstractFileSystem
  from dask import config
  from dask.dataframe.io.utils import _is_local_fs
  from dask.utils import natural_sort_key, parse_bytes
label_desc: Use image node_id 2 for calling a global function with example usage: _normalize_index_columns(user_columns, data_columns, user_index, data_index) and returns: column_names,  index_names