code: def _check_header(
      header,
      id_attr,
      left_prefix,
      right_prefix,
      label_attr,
      ignore_columns,
  ):
      r"""Verify CSV file header.
  
      Checks that:
      * There is a label column
      * There is an ID column
      * All columns except the label and ID columns, and ignored columns start with either
          the left table attribute prefix or the right table attribute prefix.
      * The number of left and right table attributes are the same.
      """
      # assert id_attr in header
      if label_attr:
          assert label_attr in header
  
      for attr in header:
          if (
              attr not in (id_attr, label_attr)
              and attr not in ignore_columns
          ):
              if not attr.startswith(
                  left_prefix
              ) and not attr.startswith(right_prefix):
                  raise ValueError(
                      "Attribute "
                      + attr
                      + " is not a left or a right table "
                      "column, not a label or id and is not ignored. Not sure "
                      "what it is..."
                  )
  
      num_left = sum(attr.startswith(left_prefix) for attr in header)
      num_right = sum(attr.startswith(right_prefix) for attr in header)
      assert num_left == num_right
  
file_path: deepmatcher/deepmatcher/data/process.py
imports: import copy
  import io
  import logging
  import os
  from timeit import default_timer
  import six
  from torchtext.utils import unicode_csv_reader
  from .dataset import MatchingDataset
  from .field import MatchingField
label_desc: Use image node_id 1 for calling a global function with example usage: _check_header(header, id_attr, left_prefix, right_prefix, label_attr, ignore_columns) without return types