class_docstr: Signal decomposition using the Spatio-Spectral Decomposition (SSD).
  
  SSD seeks to maximize the power at a frequency band of interest while
  simultaneously minimizing it at the flanking (surrounding) frequency bins
  (considered noise). It extremizes the covariance matrices associated with
  signal and noise :footcite:`NikulinEtAl2011`.
  
  SSD can either be used as a dimensionality reduction method or a
  ‘denoised’ low rank factorization method :footcite:`HaufeEtAl2014b`.
  
  Parameters
  ----------
  %(info_not_none)s Must match the input data.
  filt_params_signal : dict
      Filtering for the frequencies of interest.
  filt_params_noise : dict
      Filtering for the frequencies of non-interest.
  reg : float | str | None (default)
      Which covariance estimator to use.
      If not None (same as 'empirical'), allow regularization for covariance
      estimation. If float, shrinkage is used (0 <= shrinkage <= 1). For str
      options, reg will be passed to method :func:`mne.compute_covariance`.
  n_components : int | None (default None)
      The number of components to extract from the signal.
      If None, the number of components equal to the rank of the data are
      returned (see ``rank``).
  picks : array of int | None (default None)
      The indices of good channels.
  sort_by_spectral_ratio : bool (default True)
      If set to True, the components are sorted according to the spectral
      ratio.
      See Eq. (24) in :footcite:`NikulinEtAl2011`.
  return_filtered : bool (default False)
      If return_filtered is True, data is bandpassed and projected onto the
      SSD components.
  n_fft : int (default None)
     If sort_by_spectral_ratio is set to True, then the SSD sources will be
     sorted according to their spectral ratio which is calculated based on
     :func:`mne.time_frequency.psd_array_welch`. The n_fft parameter sets the
     length of FFT used.
     See :func:`mne.time_frequency.psd_array_welch` for more information.
  cov_method_params : dict | None (default None)
      As in :class:`mne.decoding.SPoC`
      The default is None.
  rank : None | dict | ‘info’ | ‘full’
      As in :class:`mne.decoding.SPoC`
      This controls the rank computation that can be read from the
      measurement info or estimated from the data, which determines the
      maximum possible number of components.
      See Notes of :func:`mne.compute_rank` for details.
      We recommend to use 'full' when working with epoched data.
  
  Attributes
  ----------
  filters_ : array, shape (n_channels, n_components)
      The spatial filters to be multiplied with the signal.
  patterns_ : array, shape (n_components, n_channels)
      The patterns for reconstructing the signal from the filtered data.
  
  References
  ----------
  .. footbibliography::
docstr: Remove selected components from the signal.
  
  This procedure will reconstruct M/EEG signals from which the dynamics
  described by the excluded components is subtracted
  (denoised by low-rank factorization).
  See :footcite:`HaufeEtAl2014b` for more information.
  
  .. note:: Unlike in other classes with an apply method,
     only NumPy arrays are supported (not instances of MNE objects).
  
  Parameters
  ----------
  X : array, shape ([n_epochs, ]n_channels, n_times)
      The input data from which to estimate the SSD. Either 2D array
      obtained from continuous data or 3D array obtained from epoched
      data.
  
  Returns
  -------
  X : array, shape ([n_epochs, ]n_channels, n_times)
      The processed data.
docstr_tok: ["Remove","selected","components","from","the","signal",".","This","procedure","will","reconstruct","M\/EEG","signals","from","which","the","dynamics","described","by","the","excluded","components","is","subtracted","(","denoised","by","low-rank","factorization",")",".","See",":","footcite",":","`","HaufeEtAl2014b","`","for","more","information",".","..","note",":",":","Unlike","in","other","classes","with","an","apply","method",",","only","NumPy","arrays","are","supported","(","not","instances","of","MNE","objects",")",".","Parameters","--","--","--","--","--","X",":","array",",","shape","(","[","n_epochs",",","]","n_channels",",","n_times",")","The","input","data","from","which","to","estimate","the","SSD",".","Either","2D","array","obtained","from","continuous","data","or","3D","array","obtained","from","epoched","data",".","Returns","--","--","--","-","X",":","array",",","shape","(","[","n_epochs",",","]","n_channels",",","n_times",")","The","processed","data","."]
code: def apply(self, X):
      """Remove selected components from the signal.
  
      This procedure will reconstruct M/EEG signals from which the dynamics
      described by the excluded components is subtracted
      (denoised by low-rank factorization).
      See :footcite:`HaufeEtAl2014b` for more information.
  
      .. note:: Unlike in other classes with an apply method,
         only NumPy arrays are supported (not instances of MNE objects).
  
      Parameters
      ----------
      X : array, shape ([n_epochs, ]n_channels, n_times)
          The input data from which to estimate the SSD. Either 2D array
          obtained from continuous data or 3D array obtained from epoched
          data.
  
      Returns
      -------
      X : array, shape ([n_epochs, ]n_channels, n_times)
          The processed data.
      """
      X_ssd = self.transform(X)
      pick_patterns = self.patterns_[self.sorter_spec][
          : self.n_components
      ].T
      X = pick_patterns @ X_ssd
      return X
  
imports: import numpy
  from scipy.linalg import eigh
  from .._fiff.pick import _picks_to_idx
  from ..cov import Covariance, _regularized_covariance
  from ..defaults import _handle_default
  from ..filter import filter_data
  from ..fixes import BaseEstimator
  from ..rank import compute_rank
  from ..time_frequency import psd_array_welch
  from ..utils import _check_option, _time_mask, _validate_type, _verbose_safe_false, fill_doc, logger
  from .mixin import TransformerMixin
label_desc: Use image node_id 7 for calling the SSD obj's underlying member method code with example usage: obj.apply(X) and returns: X