class_docstr: An immutable object holding a source code fragment.
  
  When using Source(...), the source lines are deindented.
class_docstr_tok: ["An","immutable","object","holding","a","source","code","fragment",".","When","using","Source","(","...",")",",","the","source","lines","are","deindented","."]
code: def __getitem__(self, key: Union[int, slice]) -> Union[str, "Source"]:
      if isinstance(key, int):
          return self.lines[key]
      else:
          if key.step not in (None, 1):
              raise IndexError("cannot slice a Source with a step")
          newsource = Source()
          newsource.lines = self.lines[key.start : key.stop]
          return newsource
  
imports: import ast
  import inspect
  import textwrap
  import tokenize
  import types
  import warnings
  from bisect import bisect_right
  from typing import Iterable
  from typing import Iterator
  from typing import List
  from typing import Optional
  from typing import overload
  from typing import Tuple
  from typing import Union
label_desc: Use image node_id 5 for calling the Source obj's underlying member method code with example usage: obj.__getitem__(key) and returns: self, newsource