code: def add_html_math_renderer(
      self,
      name: str,
      inline_renderers: tuple[Callable, Callable | None] | None,
      block_renderers: tuple[Callable, Callable | None] | None,
  ) -> None:
      logger.debug(
          "[app] adding html_math_renderer: %s, %r, %r",
          name,
          inline_renderers,
          block_renderers,
      )
      if name in self.html_inline_math_renderers:
          raise ExtensionError(
              __("math renderer %s is already registered") % name
          )
  
      if inline_renderers is not None:
          self.html_inline_math_renderers[name] = inline_renderers
      if block_renderers is not None:
          self.html_block_math_renderers[name] = block_renderers
  
imports: from __future__ import annotations
  import sys
  import traceback
  from importlib import import_module
  from types import MethodType
  from typing import TYPE_CHECKING, Any, Callable
  from sphinx.domains import Domain, Index, ObjType
  from sphinx.domains.std import GenericObject, Target
  from sphinx.errors import ExtensionError, SphinxError, VersionRequirementError
  from sphinx.extension import Extension
  from sphinx.io import create_publisher
  from sphinx.locale import __
  from sphinx.parsers import Parser
  from sphinx.roles import XRefRole
  from sphinx.util import logging
  from sphinx.util.logging import prefixed_warnings
label_desc: Use image node_id 33 for calling the SphinxComponentRegistry obj's underlying member method code with example usage: obj.add_html_math_renderer(name, inline_renderers, block_renderers) without return types