code: def test_ica_ctf():
      """Test run ICA computation on ctf data with/without compensation."""
      method = "fastica"
      raw = read_raw_ctf(ctf_fname).crop(0, 3).load_data()
      picks = sorted(
          set(range(0, len(raw.ch_names), 10))
          | set(pick_types(raw.info, ref_meg=True))
      )
      raw.pick(picks)
      events = make_fixed_length_events(raw, 99999)
      for comp in [0, 1]:
          raw.apply_gradient_compensation(comp)
          epochs = Epochs(
              raw,
              events=events,
              tmin=-0.2,
              tmax=0.2,
              baseline=None,
              preload=True,
          )
          evoked = epochs.average()
  
          # test fit
          for inst in [raw, epochs]:
              ica = ICA(n_components=2, max_iter=2, method=method)
              with _record_warnings():  # convergence sometimes
                  ica.fit(inst)
              _assert_ica_attributes(ica)
  
          # test apply and get_sources
          for inst in [raw, epochs, evoked]:
              ica.apply(inst.copy())
              ica.get_sources(inst)
  
      # test mixed compensation case
      raw.apply_gradient_compensation(0)
      ica = ICA(n_components=2, max_iter=2, method=method)
      with _record_warnings():  # convergence sometimes
          ica.fit(raw)
      _assert_ica_attributes(ica)
      raw.apply_gradient_compensation(1)
      epochs = Epochs(
          raw,
          events=events,
          tmin=-0.2,
          tmax=0.2,
          baseline=None,
          preload=True,
      )
      evoked = epochs.average()
      for inst in [raw, epochs, evoked]:
          with pytest.raises(
              RuntimeError, match="Compensation grade of ICA"
          ):
              ica.apply(inst.copy())
          with pytest.raises(
              RuntimeError, match="Compensation grade of ICA"
          ):
              ica.get_sources(inst)
  
imports: import os
  import shutil
  from contextlib import nullcontext
  from pathlib import Path
  import matplotlib.pyplot
  import numpy
  import pytest
  from numpy.testing import assert_allclose, assert_array_almost_equal, assert_array_equal, assert_equal
  from scipy import linalg, stats
  from scipy.io import loadmat, savemat
  from mne import Annotations, Epochs, EpochsArray, EvokedArray, Info, create_info, make_ad_hoc_cov, pick_channels_regexp, pick_types, read_events
  from mne._fiff.pick import _DATA_CH_TYPES_SPLIT, get_channel_type_constants
  from mne.cov import read_cov
  from mne.datasets import testing
  from mne.event import make_fixed_length_events
  from mne.io import RawArray, read_raw_ctf, read_raw_eeglab, read_raw_fif
  from mne.io.eeglab.eeglab import _check_load_mat
  from mne.preprocessing import ICA
  from mne.preprocessing import ica_find_ecg_events, ica_find_eog_events, read_ica
  from mne.preprocessing.ica import _ica_explained_variance, _sort_components, corrmap, get_score_funcs, read_ica_eeglab
  from mne.rank import _compute_rank_int
  from mne.utils import _record_warnings, catch_logging, check_version
label_desc: Use image node_id 24 for calling a global function with example usage: test_ica_ctf() without return types