docs: def fine_graining(points, steps):
      """
      :param points: a list of floats
      :param int steps: expansion steps (>= 2)
  
      >>> fine_graining([0, 1], steps=0)
      [0, 1]
      >>> fine_graining([0, 1], steps=1)
      [0, 1]
      >>> fine_graining([0, 1], steps=2)
      array([0. , 0.5, 1. ])
      >>> fine_graining([0, 1], steps=3)
      array([0.        , 0.33333333, 0.66666667, 1.        ])
      >>> fine_graining([0, 0.5, 0.7, 1], steps=2)
      array([0.  , 0.25, 0.5 , 0.6 , 0.7 , 0.85, 1.  ])
  
      N points become S * (N - 1) + 1 points with S > 0
      """
      if steps < 2:
          return points
      ls = numpy.concatenate([numpy.linspace(x, y, num=steps + 1)[:-1]
                              for x, y in pairwise(points)])
      return numpy.concatenate([ls, [points[-1]]])