docs: def build_imls(ff, continuous_fragility_discretization,
                 steps_per_interval=0):
      """
      Build intensity measure levels from a fragility function. If the function
      is continuous, they are produced simply as a linear space between minIML
      and maxIML. If the function is discrete, they are generated with a
      complex logic depending on the noDamageLimit and the parameter
      steps per interval.
  
      :param ff: a fragility function object
      :param continuous_fragility_discretization: .ini file parameter
      :param steps_per_interval:  .ini file parameter
      :returns: generated imls
      """
      if ff.format == 'discrete':
          imls = ff.imls
          if ff.nodamage and ff.nodamage < imls[0]:
              imls = [ff.nodamage] + imls
          if steps_per_interval > 1:
              gen_imls = fine_graining(imls, steps_per_interval)
          else:
              gen_imls = imls
      else:  # continuous
          gen_imls = numpy.linspace(ff.minIML, ff.maxIML,
                                    continuous_fragility_discretization)
      return gen_imls