code: def render_wavedrom(self, node, outpath, bname, format):
      
  
      # Try to convert node, raise error with code on failure
      try:
          svgout = WaveDrom().renderWaveForm(0, json.loads(node['code']))
      except JSONDecodeError as e:
          raise SphinxError("Cannot render the following json code: \n{} \n\nError: {}".format(node['code'], e))
  
      if not os.path.exists(outpath):
          os.makedirs(outpath)
  
      # SVG can be directly written and is supported on all versions
      if format == 'image/svg+xml':
          fname = "{}.{}".format(bname, "svg")
          fpath = os.path.join(outpath, fname)
          svgout.saveas(fpath)
          return fname
  
      # It gets a bit ugly, if the output does not support svg. We use cairosvg, because it is the easiest
      # to use (no dependency on installed programs). But it only works for Python 3.
      try:
          import cairosvg
      except:
          raise SphinxError(__("Cannot import 'cairosvg'. In Python 2 wavedrom figures other than svg are "
                               "not supported, in Python 3 ensure 'cairosvg' is installed."))
  
      if format == 'application/pdf':
          fname = "{}.{}".format(bname, "pdf")
          fpath = os.path.join(outpath, fname)
          cairosvg.svg2pdf(svgout.tostring(), write_to=fpath)
          return fname
  
      if format == 'image/png':
          fname = "{}.{}".format(bname, "png")
          fpath = os.path.join(outpath, fname)
          cairosvg.svg2png(svgout.tostring(), write_to=fpath)
          return fname
  
      raise SphinxError("No valid wavedrom conversion supplied")
docs: Render a wavedrom image