code: def csd_morlet(
      epochs,
      frequencies,
      tmin=None,
      tmax=None,
      picks=None,
      n_cycles=7,
      use_fft=True,
      decim=1,
      projs=None,
      n_jobs=None,
      *,
      verbose=None,
  ):
      """Estimate cross-spectral density from epochs using Morlet wavelets.
  
      Parameters
      ----------
      epochs : instance of Epochs
          The epochs to compute the CSD for.
      frequencies : list of float
          The frequencies of interest, in Hertz.
      tmin : float | None
          Minimum time instant to consider, in seconds. If ``None`` start at
          first sample.
      tmax : float | None
          Maximum time instant to consider, in seconds. If ``None`` end at last
          sample.
      %(picks_good_data_noref)s
      n_cycles : float | list of float | None
          Number of cycles to use when constructing Morlet wavelets. Fixed number
          or one per frequency. Defaults to 7.
      use_fft : bool
          Whether to use FFT-based convolution to compute the wavelet transform.
          Defaults to True.
      decim : int | slice
          To reduce memory usage, decimation factor during time-frequency
          decomposition. Defaults to 1 (no decimation).
  
          If `int`, uses tfr[..., ::decim].
          If `slice`, uses tfr[..., decim].
  
      projs : list of Projection | None
          List of projectors to store in the CSD object. Defaults to ``None``,
          which means the projectors defined in the Epochs object will be copied.
      %(n_jobs)s
      %(verbose)s
  
      Returns
      -------
      csd : instance of CrossSpectralDensity
          The computed cross-spectral density.
  
      See Also
      --------
      csd_array_fourier
      csd_array_morlet
      csd_array_multitaper
      csd_fourier
      csd_multitaper
      """
      epochs, projs = _prepare_csd(epochs, tmin, tmax, picks, projs)
      return csd_array_morlet(
          epochs.get_data(copy=False),
          sfreq=epochs.info["sfreq"],
          frequencies=frequencies,
          t0=epochs.tmin,
          tmin=tmin,
          tmax=tmax,
          ch_names=epochs.ch_names,
          n_cycles=n_cycles,
          use_fft=use_fft,
          decim=decim,
          projs=projs,
          n_jobs=n_jobs,
          verbose=verbose,
      )
  
imports: import copy
  import numbers
  import numpy
  from scipy.fft import rfftfreq
  from .._fiff.pick import _picks_to_idx, pick_channels
  from ..parallel import parallel_func
  from ..time_frequency.multitaper import _compute_mt_params, _csd_from_mt, _mt_spectra, _psd_from_mt_adaptive
  from ..utils import ProgressBar, _check_fname, _import_h5io_funcs, _validate_type, copy_function_doc_to_method_doc, logger, verbose, warn
  from ..viz.misc import plot_csd
  from .tfr import EpochsTFR, _cwt_array, _get_nfft, morlet
label_desc: Use image node_id 10 for calling a global function with example usage: csd_morlet(epochs, frequencies, tmin, tmax, picks, n_cycles, use_fft, decim, projs, n_jobs) and returns: csd_array_morlet