code: def __init__(self, refcount_filename, stable_abi_file):
      self.refcount_data = {}
      with open(refcount_filename, "r") as fp:
          for line in fp:
              line = line.strip()
              if line[:1] in ("", "#"):
                  # blank lines and comments
                  continue
              parts = line.split(":", 4)
              if len(parts) != 5:
                  raise ValueError("Wrong field count in %r" % line)
              function, type, arg, refcount, comment = parts
              # Get the entry, creating it if needed:
              try:
                  entry = self.refcount_data[function]
              except KeyError:
                  entry = self.refcount_data[function] = RCEntry(
                      function
                  )
              if not refcount or refcount == "null":
                  refcount = None
              else:
                  refcount = int(refcount)
              # Update the entry with the new parameter or the result
              # information.
              if arg:
                  entry.args.append((arg, type, refcount))
              else:
                  entry.result_type = type
                  entry.result_refs = refcount
  
      self.stable_abi_data = {}
      with open(stable_abi_file, "r") as fp:
          for record in csv.DictReader(fp):
              role = record["role"]
              name = record["name"]
              self.stable_abi_data[name] = record
  
file_path: cpython/Doc/tools/extensions/c_annotations.py
imports: from os import path
  import docutils
  from docutils import nodes
  from docutils.parsers.rst import directives
  from docutils.parsers.rst import Directive
  from docutils.statemachine import StringList
  from sphinx.locale import _
  import csv
  from sphinx import addnodes
  from sphinx.domains.c import CObject
label_desc: Use image node_id 1 to create a new Annotations object  with example: obj = Annotations(refcount_filename, stable_abi_file)