docs: def underflow(self, axis=0):
          """
          Return the underflow for the given axis.
  
          Depending on the dimension of the histogram, may return an array.
          """
          if axis not in range(3):
              raise ValueError("axis must be 0, 1, or 2")
          if self.DIM == 1:
              return self.GetBinContent(0)
          elif self.DIM == 2:
              def idx(i):
                  arg = [i]
                  arg.insert(axis, 0)
                  return arg
              return [
                  self.GetBinContent(*idx(i))
                  for i in self.bins_range(axis=(axis + 1) % 2, overflow=True)]
          elif self.DIM == 3:
              axes = [0, 1, 2]
              axes.remove(axis)
              axis2, axis3 = axes
              def idx(i, j):
                  arg = [i, j]
                  arg.insert(axis, 0)
                  return arg
              return [[
                  self.GetBinContent(*idx(i, j))
                  for i in self.bins_range(axis=axis2, overflow=True)]
                  for j in self.bins_range(axis=axis3, overflow=True)]