code: def analyze_pipes(
      nlp: "Language", *, keys: List[str] = DEFAULT_KEYS
  ) -> Dict[str, Dict[str, Union[List[str], Dict]]]:
      """Print a formatted summary for the current nlp object's pipeline. Shows
      a table with the pipeline components and why they assign and require, as
      well as any problems if available.
  
      nlp (Language): The nlp object.
      keys (List[str]): The meta keys to show in the table.
      RETURNS (dict): A dict with "summary" and "problems".
      """
      result: Dict[str, Dict[str, Union[List[str], Dict]]] = {
          "summary": {},
          "problems": {},
      }
      all_attrs: Set[str] = set()
      for i, name in enumerate(nlp.pipe_names):
          meta = nlp.get_pipe_meta(name)
          all_attrs.update(meta.assigns)
          all_attrs.update(meta.requires)
          result["summary"][name] = {
              key: getattr(meta, key, None) for key in keys
          }
          prev_pipes = nlp.pipeline[:i]
          requires = {annot: False for annot in meta.requires}
          if requires:
              for prev_name, prev_pipe in prev_pipes:
                  prev_meta = nlp.get_pipe_meta(prev_name)
                  for annot in prev_meta.assigns:
                      requires[annot] = True
          result["problems"][name] = [
              annot
              for annot, fulfilled in requires.items()
              if not fulfilled
          ]
      result["attrs"] = {
          attr: get_attr_info(nlp, attr) for attr in all_attrs
      }
      return result
  
file_path: spacy/spacy/pipe_analysis.py
imports: from typing import TYPE_CHECKING, Dict, ItemsView, Iterable, List, Set, Union
  from wasabi import msg
  from .errors import Errors
  from .tokens import Doc, Span, Token
  from .util import dot_to_dict
label_desc: Use image node_id 3 for calling a global function with example usage: analyze_pipes(nlp) and returns: result