class_docstr: Dictionary-like object holding a projection vector.
  
  Projection vectors are stored in a list in ``inst.info["projs"]``. Each projection
  vector has 5 keys: ``active``, ``data``, ``desc``, ``explained_var``, ``kind``.
  
  .. warning:: This class is generally not meant to be instantiated
               directly, use ``compute_proj_*`` functions instead.
  
  Parameters
  ----------
  data : dict
      The data dictionary.
  desc : str
      The projector description.
  kind : int
      The projector kind.
  active : bool
      Whether or not the projector has been applied.
  explained_var : float | None
      The proportion of explained variance.
code: def __repr__(self):  # noqa: D105
      s = "%s" % self["desc"]
      s += ", active : %s" % self["active"]
      s += f", n_channels : {len(self['data']['col_names'])}"
      if self["explained_var"] is not None:
          s += f', exp. var : {self["explained_var"] * 100:0.2f}%'
      return "<Projection | %s>" % s
  
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 Projection obj's underlying member method code with example usage: obj.__repr__() and returns: unknown