code: def coverage_post_process(app, exception):
      if exception is not None:
          return
  
      # Only run this test for the coverage build
      if not isinstance(app.builder, CoverageBuilder):
          return
  
      # we collected what has been already documented by sphinx to compare it
      # with the full list of classes of Avalanche.
      doc_classes = app.env.domaindata["py"]["objects"]
      doc_classes = set([s.split(".")[-1] for s in doc_classes])
      # print(doc_classes)
      # STRONG ASSUMPTION HERE: unique names for classes in different namespaces.
      # Otherwise, we need to detect the case when mylib.Type is documented but
      # mylib.a.Type (submodule) is not, and I don't want to do this. Also,
      # uniqueness hold in Avalanche (for the moment).
  
      def is_not_internal(name):
          """Internal modules/classes start with underscores."""
          split_name = name.split(".")
          for name in split_name:
              if name[0] == "_":
                  return False
          return True
  
      # print("Search classes:")
      try:
          lib_classes = set()
          for _, modname, ispkg in pkgutil.walk_packages(
              path=avalanche.__path__, prefix=avalanche.__name__ + "."
          ):
              # print("MODULE: " + modname)
              try:
                  for name, obj in inspect.getmembers(
                      sys.modules[modname]
                  ):
                      # print(name)
                      if (
                          inspect.isclass(obj)
                          and obj.__module__.startswith("avalanche")
                          and is_not_internal(
                              obj.__module__ + "." + name
                          )
                      ):
                          # print("CLASS: " + obj.__module__ + '.' + obj.__name__)
                          lib_classes.add(name)
              except Exception as e:
                  # TODO: I got some errors on lvis.
                  # Also seems to crash on module attributes that are
                  # instance variables instead of classes/functions/modules.
                  # No idea why, but we can ignore them for the moment.
                  print(
                      f"KeyError on module {modname}, class {name}, exception "
                      f"type {type(e)}"
                  )
  
      except Exception as e:
          print("ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
          print(
              f"on module {modname}, class {name}, exception type {type(e)}"
          )
          print("ERROR MESSAGE: ", e)
  
      print(lib_classes)
  
      missing_classes = lib_classes - doc_classes
      missing_classes = missing_classes - undocumented_classes_to_ignore
      print("MISSING CLASSES: ")
      for el in missing_classes:
          print(f"\t- {el}")
  
file_path: avalanche/docs/conf.py
imports: import os
  import sys
  import pkgutil
  from importlib import import_module
  from typing import Any
  from jinja2.filters import FILTERS
  from sphinx.ext.coverage import CoverageBuilder
  import avalanche
  import inspect
  import pkgutil
label_desc: Use image node_id 1 for calling a global function with example usage: coverage_post_process(app, exception) and returns: True, False