class_docstr: Find cell magics.
  
  Note that the source of the abstract syntax tree
  will already have been processed by IPython's
  TransformerManager().transform_cell.
  
  For example,
  
      %%time
  
      foo()
  
  would have been transformed to
  
      get_ipython().run_cell_magic('time', '', 'foo()\n')
  
  and we look for instances of the latter.
class_docstr_tok: ["Find","cell","magics",".","Note","that","the","source","of","the","abstract","syntax","tree","will","already","have","been","processed","by","IPython's","TransformerManager","(",")",".transform_cell",".","For","example",",","%","%","time","foo","(",")","would","have","been","transformed","to","get_ipython","(",")",".run_cell_magic","(","'time","'",",","``",",","'foo","(",")","\\n","'",")","and","we","look","for","instances","of","the","latter","."]
code: def __init__(self, cell_magic: Optional[CellMagic] = None) -> None:
      self.cell_magic = cell_magic
  
imports: import ast
  import collections
  import dataclasses
  import secrets
  import sys
  from functools import lru_cache
  from importlib.util import find_spec
  from typing import Dict, List, Optional, Tuple
  from black.output import out
  from black.report import NothingChanged
label_desc: Use image node_id 1 to create a new CellMagicFinder object from inherited base classes: ast with example: obj = CellMagicFinder(cell_magic)