code: def _fit_chpi_amplitudes(raw, time_sl, hpi, snr=False):
      """Fit amplitudes for each channel from each of the N cHPI sinusoids.
  
      Returns
      -------
      sin_fit : ndarray, shape (n_freqs, n_channels)
          The sin amplitudes matching each cHPI frequency.
          Will be all nan if this time window should be skipped.
      snr : ndarray, shape (n_freqs, 2)
          Estimated SNR for this window, separately for mag and grad channels.
      """
      # No need to detrend the data because our model has a DC term
      with use_log_level(False):
          # loads good channels
          this_data = raw[hpi["meg_picks"], time_sl][0]
  
      # which HPI coils to use
      if hpi["hpi_pick"] is not None:
          with use_log_level(False):
              # loads hpi_stim channel
              chpi_data = raw[hpi["hpi_pick"], time_sl][0]
  
          ons = (
              np.round(chpi_data).astype(np.int64)
              & hpi["on"][:, np.newaxis]
          ).astype(bool)
          n_on = ons.all(axis=-1).sum(axis=0)
          if not (n_on >= 3).all():
              return None
      if snr:
          return _fast_fit_snr(
              this_data,
              len(hpi["freqs"]),
              hpi["model"],
              hpi["inv_model"],
              hpi["mag_subpicks"],
              hpi["grad_subpicks"],
          )
      return _fast_fit(
          this_data,
          hpi["proj_op"],
          len(hpi["freqs"]),
          hpi["model"],
          hpi["inv_model_reord"],
      )
  
imports: import copy
  import itertools
  from functools import partial
  import numpy
  from scipy.linalg import orth
  from scipy.optimize import fmin_cobyla
  from scipy.spatial.distance import cdist
  from ._fiff.constants import FIFF
  from ._fiff.meas_info import Info, _simplify_info
  from ._fiff.pick import _picks_to_idx, pick_channels, pick_channels_regexp, pick_info, pick_types
  from ._fiff.proj import Projection, setup_proj
  from .channels.channels import _get_meg_system
  from .cov import compute_whitener, make_ad_hoc_cov
  from .dipole import _make_guesses
  from .event import find_events
  from .fixes import jit
  from .forward import _concatenate_coils, _create_meg_coils, _magnetic_dipole_field_vec
  from .io import BaseRaw
  from .io.ctf.trans import _make_ctf_coord_trans_set
  from .io.kit.constants import KIT
  from .io.kit.kit import RawKIT
  from .preprocessing.maxwell import _get_mf_picks_fix_mags, _prep_mf_coils, _regularize_out, _sss_basis
  from .transforms import _angle_between_quats, _fit_matched_points, _quat_to_affine, als_ras_trans, apply_trans, invert_transform, quat_to_rot, rot_to_quat
  from .utils import ProgressBar, _check_fname, _check_option, _on_missing, _pl, _validate_type, _verbose_safe_false, logger, use_log_level, verbose, warn
label_desc: Use image node_id 20 for calling a global function with example usage: _fit_chpi_amplitudes(raw, time_sl, hpi, snr) and returns: _fast_fit, _fast_fit_snr, None