class_docstr: Tools for generating an example page from a file
class_docstr_tok: ["Tools","for","generating","an","example","page","from","a","file"]
docstr: Extract a module-level docstring
          
docstr_tok: ["Extract","a","module-level","docstring"]
code: def extract_docstring(self):
      """Extract a module-level docstring"""
      lines = open(self.filename).readlines()
      start_row = 0
      if lines[0].startswith("#!"):
          lines.pop(0)
          start_row = 1
  
      docstring = ""
      first_par = ""
      line_iter = lines.__iter__()
      tokens = tokenize.generate_tokens(lambda: next(line_iter))
      for tok_type, tok_content, _, (erow, _), _ in tokens:
          tok_type = token.tok_name[tok_type]
          if tok_type in (
              "NEWLINE",
              "COMMENT",
              "NL",
              "INDENT",
              "DEDENT",
          ):
              continue
          elif tok_type == "STRING":
              docstring = eval(tok_content)
              # If the docstring is formatted with several paragraphs,
              # extract the first one:
              paragraphs = "\n".join(
                  line.rstrip() for line in docstring.split("\n")
              ).split("\n\n")
              if len(paragraphs) > 0:
                  first_par = paragraphs[0]
          break
  
      thumbloc = None
      for i, line in enumerate(docstring.split("\n")):
          m = re.match(r"^_thumb: (\.\d+),\s*(\.\d+)", line)
          if m:
              thumbloc = float(m.group(1)), float(m.group(2))
              break
      if thumbloc is not None:
          self.thumbloc = thumbloc
          docstring = "\n".join(
              [
                  l
                  for l in docstring.split("\n")
                  if not l.startswith("_thumb")
              ]
          )
  
      self.docstring = docstring
      self.short_desc = first_par
      self.end_line = erow + 1 + start_row
  
imports: import os
  import os.path
  import re
  import glob
  import token
  import tokenize
  import shutil
  import warnings
  import matplotlib
  import matplotlib.pyplot
label_desc: Use image node_id 14 for calling the ExampleGenerator obj's underlying member method code with example usage: obj.extract_docstring() without return types