code: def _get_ch_info(info):
      """Get channel info for inferring acquisition device."""
      chs = info["chs"]
      # Only take first 16 bits, as higher bits store CTF comp order
      coil_types = {ch["coil_type"] & 0xFFFF for ch in chs}
      channel_types = {ch["kind"] for ch in chs}
  
      has_vv_mag = any(
          k in coil_types
          for k in [
              FIFF.FIFFV_COIL_VV_MAG_T1,
              FIFF.FIFFV_COIL_VV_MAG_T2,
              FIFF.FIFFV_COIL_VV_MAG_T3,
          ]
      )
      has_vv_grad = any(
          k in coil_types
          for k in [
              FIFF.FIFFV_COIL_VV_PLANAR_T1,
              FIFF.FIFFV_COIL_VV_PLANAR_T2,
              FIFF.FIFFV_COIL_VV_PLANAR_T3,
          ]
      )
      has_neuromag_122_grad = any(
          k in coil_types for k in [FIFF.FIFFV_COIL_NM_122]
      )
  
      is_old_vv = " " in chs[0]["ch_name"]
  
      has_4D_mag = FIFF.FIFFV_COIL_MAGNES_MAG in coil_types
      ctf_other_types = (
          FIFF.FIFFV_COIL_CTF_REF_MAG,
          FIFF.FIFFV_COIL_CTF_REF_GRAD,
          FIFF.FIFFV_COIL_CTF_OFFDIAG_REF_GRAD,
      )
      has_CTF_grad = FIFF.FIFFV_COIL_CTF_GRAD in coil_types or (
          FIFF.FIFFV_MEG_CH in channel_types
          and any(k in ctf_other_types for k in coil_types)
      )
      # hack due to MNE-C bug in IO of CTF
      # only take first 16 bits, as higher bits store CTF comp order
      n_kit_grads = sum(
          ch["coil_type"] & 0xFFFF == FIFF.FIFFV_COIL_KIT_GRAD
          for ch in chs
      )
  
      has_any_meg = any(
          [
              has_vv_mag,
              has_vv_grad,
              has_4D_mag,
              has_CTF_grad,
              n_kit_grads,
          ]
      )
      has_eeg_coils = (
          FIFF.FIFFV_COIL_EEG in coil_types
          and FIFF.FIFFV_EEG_CH in channel_types
      )
      has_eeg_coils_and_meg = has_eeg_coils and has_any_meg
      has_eeg_coils_only = has_eeg_coils and not has_any_meg
      has_csd_coils = (
          FIFF.FIFFV_COIL_EEG_CSD in coil_types
          and FIFF.FIFFV_EEG_CH in channel_types
      )
  
      return (
          has_vv_mag,
          has_vv_grad,
          is_old_vv,
          has_4D_mag,
          ctf_other_types,
          has_CTF_grad,
          n_kit_grads,
          has_any_meg,
          has_eeg_coils,
          has_eeg_coils_and_meg,
          has_eeg_coils_only,
          has_neuromag_122_grad,
          has_csd_coils,
      )
  
imports: import os.path
  import string
  import sys
  from collections import OrderedDict
  from copy import deepcopy
  from dataclasses import dataclass
  from functools import partial
  from pathlib import Path
  from typing import Union
  import numpy
  from scipy.io import loadmat
  from scipy.sparse import csr_matrix, lil_matrix
  from scipy.spatial import Delaunay
  from scipy.stats import zscore
  from .._fiff.constants import FIFF
  from .._fiff.meas_info import Info, MontageMixin, _merge_info, _rename_comps, _unit2human, create_info
  from .._fiff.pick import _check_excludes_includes, _pick_data_channels, _picks_by_type, _picks_to_idx, _second_rules, channel_indices_by_type, channel_type, pick_channels, pick_info, pick_types
  from .._fiff.proj import setup_proj
  from .._fiff.reference import add_reference_channels, set_eeg_reference
  from .._fiff.tag import _rename_list
  from ..bem import _check_origin
  from ..defaults import HEAD_SIZE_DEFAULT, _handle_default
  from ..utils import _check_dict_keys, _check_fname, _check_option, _check_preload, _get_stim_channel, _on_missing, _validate_type, fill_doc, legacy, logger, verbose, warn
label_desc: Use image node_id 13 for calling a global function with example usage: _get_ch_info(info) and returns: has_vv_mag,  has_vv_grad,  is_old_vv,  has_4D_mag,  ctf_other_types,  has_CTF_grad,  n_kit_grads,  has_any_meg,  has_eeg_coils,  has_eeg_coils_and_meg,  has_eeg_coils_only,  has_neuromag_122_grad,  has_csd_coils