class_docstr: Mixin class for Raw, Evoked, Epochs.
  
  Notes
  -----
  This mixin adds a proj attribute as a property to data containers.
  It is True if at least one proj is present and all of them are active.
  The projs might not be applied yet if data are not preloaded. In
  this case it's the _projector attribute that does the job.
  If a private _data attribute is present then the projs applied
  to it are the ones marked as active.
  
  A proj parameter passed in constructor of raw or epochs calls
  apply_proj and hence after the .proj attribute is True.
  
  As soon as you've applied the projs it will stay active in the
  remaining pipeline.
  
  The suggested pipeline is proj=True in epochs (it's cheaper than for raw).
  
  When you use delayed SSP in Epochs, projs are applied when you call
  get_data() method. They are not applied to the evoked._data unless you call
  apply_proj(). The reason is that you want to reject with projs although
  it's not stored in proj mode.
docstr: Remove SSP projection vector.
  
  .. note:: The projection vector can only be removed if it is inactive
            (has not been applied to the data).
  
  Parameters
  ----------
  idx : int | list of int | str
      Index of the projector to remove. Can also be "all" (default)
      to remove all projectors.
  
  Returns
  -------
  self : instance of Raw | Epochs | Evoked
      The instance.
docstr_tok: ["Remove","SSP","projection","vector",".","..","note",":",":","The","projection","vector","can","only","be","removed","if","it","is","inactive","(","has","not","been","applied","to","the","data",")",".","Parameters","--","--","--","--","--","idx",":","int","|","list","of","int","|","str","Index","of","the","projector","to","remove",".","Can","also","be","``","all","''","(","default",")","to","remove","all","projectors",".","Returns","--","--","--","-","self",":","instance","of","Raw","|","Epochs","|","Evoked","The","instance","."]
code: def del_proj(self, idx="all"):
      """Remove SSP projection vector.
  
      .. note:: The projection vector can only be removed if it is inactive
                (has not been applied to the data).
  
      Parameters
      ----------
      idx : int | list of int | str
          Index of the projector to remove. Can also be "all" (default)
          to remove all projectors.
  
      Returns
      -------
      self : instance of Raw | Epochs | Evoked
          The instance.
      """
      if isinstance(idx, str) and idx == "all":
          idx = list(range(len(self.info["projs"])))
      idx = np.atleast_1d(np.array(idx, int)).ravel()
  
      for ii in idx:
          proj = self.info["projs"][ii]
          if proj["active"] and set(self.info["ch_names"]) & set(
              proj["data"]["col_names"]
          ):
              msg = (
                  f"Cannot remove projector that has already been "
                  f"applied, unless you first remove all channels it "
                  f"applies to. The problematic projector is: {proj}"
              )
              raise ValueError(msg)
  
      keep = np.ones(len(self.info["projs"]))
      keep[idx] = False  # works with negative indexing and does checks
      with self.info._unlock():
          self.info["projs"] = [
              p for p, k in zip(self.info["projs"], keep) if k
          ]
      return self
  
imports: import re
  from copy import deepcopy
  from itertools import count
  import numpy
  from ..defaults import _BORDER_DEFAULT, _EXTRAPOLATE_DEFAULT, _INTERPOLATION_DEFAULT
  from ..fixes import _safe_svd
  from ..utils import _check_option, _validate_type, fill_doc, logger, object_diff, verbose, warn
  from .constants import FIFF
  from .pick import _ELECTRODE_CH_TYPES, _electrode_types, pick_info, pick_types
  from .tag import _rename_list, find_tag
  from .tree import dir_tree_find
  from .write import _safe_name_list, end_block, start_block, write_float, write_float_matrix, write_int, write_name_list_sanitized, write_string
label_desc: Use image node_id 4 for calling the ProjMixin obj's underlying member method code with example usage: obj.del_proj(idx) and returns: self