code: def extendMarkdown(self, md, md_globals):
      def _wrap_node(node, preview_text, wrapper_tag):
          if not self.getConfig("add_preview"):
              return node
          preview = etree.Element("span", {"class": "MathJax_Preview"})
          preview.text = AtomicString(preview_text)
          wrapper = etree.Element(wrapper_tag)
          wrapper.extend([preview, node])
          return wrapper
  
      def handle_match_inline(m):
          node = etree.Element("script")
          node.set("type", "math/tex")
          node.text = AtomicString(m.group(3))
          return _wrap_node(node, "".join(m.group(2, 3, 4)), "span")
  
      def handle_match(m):
          node = etree.Element("script")
          node.set("type", "math/tex; mode=display")
          if "\\begin" in m.group(2):
              node.text = AtomicString("".join(m.group(2, 4, 5)))
              return _wrap_node(
                  node, "".join(m.group(1, 2, 4, 5, 6)), "div"
              )
          else:
              node.text = AtomicString(m.group(3))
              return _wrap_node(node, "".join(m.group(2, 3, 4)), "div")
  
      inlinemathpatterns = (
          Pattern(r"(?<!\\|\$)(\$)([^\$]+)(\$)"),  #  $...$
          Pattern(r"(?<!\\)(\\\()(.+?)(\\\))"),  # \(...\)
      )
      mathpatterns = (
          Pattern(r"(?<!\\)(\$\$)([^\$]+)(\$\$)"),  # $$...$$
          Pattern(r"(?<!\\)(\\\[)(.+?)(\\\])"),  # \[...\]
          Pattern(r"(?<!\\)(\\begin{([a-z]+?\*?)})(.+?)(\\end{\3})"),
      )
      if not self.getConfig("enable_dollar_delimiter"):
          inlinemathpatterns = inlinemathpatterns[1:]
      for i, pattern in enumerate(inlinemathpatterns):
          pattern.handleMatch = handle_match_inline
          md.inlinePatterns.add(
              "math-inline-%d" % i, pattern, "<escape"
          )
      for i, pattern in enumerate(mathpatterns):
          pattern.handleMatch = handle_match
          md.inlinePatterns.add("math-%d" % i, pattern, "<escape")
  
file_path: biopandas/docs/mdx_math.py
imports: from markdown.inlinepatterns import Pattern
  from markdown.extensions import Extension
  from markdown.util import AtomicString, etree
label_desc: Use image node_id 2 for calling the MathExtension obj's underlying member method code with example usage: obj.extendMarkdown(md, md_globals) and returns: wrapper, _wrap_node, node, _wrap_node, _wrap_node