code: def _infer_col_names(raw_extras):
      """Build column and channel names for data from Eyelink ASCII file.
  
      Returns the expected column names for the sample lines and event
      lines, to be passed into pd.DataFrame. The columns present in an eyelink ASCII
      file can vary. The order that col_names are built below should NOT change.
      """
      col_names = {}
      # initiate the column names for the sample lines
      col_names["samples"] = list(EYELINK_COLS["timestamp"])
  
      # and for the eye message lines
      col_names["blinks"] = list(EYELINK_COLS["eye_event"])
      col_names["fixations"] = list(
          EYELINK_COLS["eye_event"] + EYELINK_COLS["fixation"]
      )
      col_names["saccades"] = list(
          EYELINK_COLS["eye_event"] + EYELINK_COLS["saccade"]
      )
  
      # Recording was either binocular or monocular
      # If monocular, find out which eye was tracked and append to ch_name
      if raw_extras["tracking_mode"] == "monocular":
          eye = raw_extras["eye"]
          ch_names = list(EYELINK_COLS["pos"][eye])
      elif raw_extras["tracking_mode"] == "binocular":
          ch_names = list(
              EYELINK_COLS["pos"]["left"] + EYELINK_COLS["pos"]["right"]
          )
      col_names["samples"].extend(ch_names)
  
      # The order of these if statements should not be changed.
      if (
          "VEL" in raw_extras["rec_info"]
      ):  # If velocity data are reported
          if raw_extras["tracking_mode"] == "monocular":
              ch_names.extend(EYELINK_COLS["velocity"][eye])
              col_names["samples"].extend(EYELINK_COLS["velocity"][eye])
          elif raw_extras["tracking_mode"] == "binocular":
              ch_names.extend(
                  EYELINK_COLS["velocity"]["left"]
                  + EYELINK_COLS["velocity"]["right"]
              )
              col_names["samples"].extend(
                  EYELINK_COLS["velocity"]["left"]
                  + EYELINK_COLS["velocity"]["right"]
              )
      # if resolution data are reported
      if "RES" in raw_extras["rec_info"]:
          ch_names.extend(EYELINK_COLS["resolution"])
          col_names["samples"].extend(EYELINK_COLS["resolution"])
          col_names["fixations"].extend(EYELINK_COLS["resolution"])
          col_names["saccades"].extend(EYELINK_COLS["resolution"])
      # if digital input port values are reported
      if "INPUT" in raw_extras["rec_info"]:
          ch_names.extend(EYELINK_COLS["input"])
          col_names["samples"].extend(EYELINK_COLS["input"])
  
      # if head target info was reported, add its cols
      if "HTARGET" in raw_extras["rec_info"]:
          ch_names.extend(EYELINK_COLS["remote"])
          col_names["samples"].extend(EYELINK_COLS["remote"])
  
      return col_names, ch_names
  
imports: import re
  from datetime import datetime, timedelta, timezone
  import numpy
  from ..._fiff.constants import FIFF
  from ..._fiff.meas_info import create_info
  from ...annotations import Annotations
  from ...utils import _check_pandas_installed, logger, warn
label_desc: Use image node_id 10 for calling a global function with example usage: _infer_col_names(raw_extras) and returns: col_names,  ch_names