docs: def draw(plottables, pad=None, same=False,
           xaxis=None, yaxis=None,
           xtitle=None, ytitle=None,
           xlimits=None, ylimits=None,
           xdivisions=None, ydivisions=None,
           logx=False, logy=False,
           **kwargs):
      """
      Draw a list of histograms, stacks, and/or graphs.
  
      Parameters
      ----------
      plottables : Hist, Graph, HistStack, or list of such objects
          List of objects to draw.
  
      pad : Pad or Canvas, optional (default=None)
          The pad to draw onto. If None then use the current global pad.
  
      same : bool, optional (default=False)
          If True then use 'SAME' draw option for all objects instead of
          all but the first. Use this option if you are drawing onto a pad
          that already holds drawn objects.
  
      xaxis : TAxis, optional (default=None)
          Use this x-axis or use the x-axis of the first plottable if None.
  
      yaxis : TAxis, optional (default=None)
          Use this y-axis or use the y-axis of the first plottable if None.
  
      xtitle : str, optional (default=None)
          Set the x-axis title.
  
      ytitle : str, optional (default=None)
          Set the y-axis title.
  
      xlimits : tuple, optional (default=None)
          Set the x-axis limits with a 2-tuple of (min, max)
  
      ylimits : tuple, optional (default=None)
          Set the y-axis limits with a 2-tuple of (min, max)
  
      xdivisions : int, optional (default=None)
          Set the number of divisions for the x-axis
  
      ydivisions : int, optional (default=None)
          Set the number of divisions for the y-axis
  
      logx : bool, optional (default=False)
          If True, then set the x-axis to log scale.
  
      logy : bool, optional (default=False)
          If True, then set the y-axis to log scale.
  
      kwargs : dict
          All extra arguments are passed to get_limits when determining the axis
          limits.
  
      Returns
      -------
      (xaxis, yaxis), (xmin, xmax, ymin, ymax) : tuple
          The axes and axes bounds.
  
      See Also
      --------
      get_limits
  
      """
      context = preserve_current_canvas if pad else do_nothing
      if not isinstance(plottables, (tuple, list)):
          plottables = [plottables]
      elif not plottables:
          raise ValueError("plottables is empty")
      with context():
          if pad is not None:
              pad.cd()
          # get the axes limits
          xmin, xmax, ymin, ymax = get_limits(plottables,
                                              logx=logx, logy=logy,
                                              **kwargs)
          if xlimits is not None:
              xmin, xmax = xlimits
          if ylimits is not None:
              ymin, ymax = ylimits
          if not same:
              obj = plottables.pop(0)
              if isinstance(obj, ROOT.THStack):
                  obj.SetMinimum(ymin)
                  obj.SetMaximum(ymax)
              obj.Draw()
              xaxis = obj.xaxis
              yaxis = obj.yaxis
          # draw the plottables
          for i, obj in enumerate(plottables):
              if i == 0 and isinstance(obj, ROOT.THStack):
                  # use SetMin/Max for y-axis
                  obj.SetMinimum(ymin)
                  obj.SetMaximum(ymax)
                  # ROOT: please fix this...
              obj.Draw('SAME')
          # set the axes limits and titles
          if xaxis is not None:
              xaxis.SetLimits(xmin, xmax)
              xaxis.SetRangeUser(xmin, xmax)
              if xtitle is not None:
                  xaxis.SetTitle(xtitle)
              if xdivisions is not None:
                  xaxis.SetNdivisions(xdivisions)
          if yaxis is not None:
              yaxis.SetLimits(ymin, ymax)
              yaxis.SetRangeUser(ymin, ymax)
              if ytitle is not None:
                  yaxis.SetTitle(ytitle)
              if ydivisions is not None:
                  yaxis.SetNdivisions(ydivisions)
          if pad is None:
              pad = ROOT.gPad
          pad.SetLogx(bool(logx))
          pad.SetLogy(bool(logy))
          # redraw axes on top
          # axes ticks sometimes get hidden by filled histograms
          pad.RedrawAxis()
      return (xaxis, yaxis), (xmin, xmax, ymin, ymax)