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: Add SSP projection vectors.
  
  Parameters
  ----------
  projs : list
      List with projection vectors.
  remove_existing : bool
      Remove the projection vectors currently in the file.
  %(verbose)s
  
  Returns
  -------
  self : instance of Raw | Epochs | Evoked
      The data container.
docstr_tok: ["Add","SSP","projection","vectors",".","Parameters","--","--","--","--","--","projs",":","list","List","with","projection","vectors",".","remove_existing",":","bool","Remove","the","projection","vectors","currently","in","the","file",".","%","(","verbose",")","s","Returns","--","--","--","-","self",":","instance","of","Raw","|","Epochs","|","Evoked","The","data","container","."]
code: def add_proj(self, projs, remove_existing=False, verbose=None):
      """Add SSP projection vectors.
  
      Parameters
      ----------
      projs : list
          List with projection vectors.
      remove_existing : bool
          Remove the projection vectors currently in the file.
      %(verbose)s
  
      Returns
      -------
      self : instance of Raw | Epochs | Evoked
          The data container.
      """
      if isinstance(projs, Projection):
          projs = [projs]
  
      if not isinstance(projs, list) and not all(
          isinstance(p, Projection) for p in projs
      ):
          raise ValueError(
              "Only projs can be added. You supplied " "something else."
          )
  
      # mark proj as inactive, as they have not been applied
      projs = deactivate_proj(projs, copy=True)
      if remove_existing:
          # we cannot remove the proj if they are active
          if any(p["active"] for p in self.info["projs"]):
              raise ValueError(
                  "Cannot remove projectors that have "
                  "already been applied"
              )
          with self.info._unlock():
              self.info["projs"] = projs
      else:
          self.info["projs"].extend(projs)
      # We don't want to add projectors that are activated again.
      with self.info._unlock():
          self.info["projs"] = _uniquify_projs(
              self.info["projs"], check_active=False, sort=False
          )
      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 2 for calling the ProjMixin obj's underlying member method code with example usage: obj.add_proj(projs, remove_existing, verbose) and returns: self