code: def _apply_rate(self, max_rate, aggressive=False):
          
          self.log(u"Called _apply_rate")
          self.log([u"  Aggressive: %s", aggressive])
          self.log([u"  Max rate:   %.3f", max_rate])
          regular_fragments = list(self.smflist.regular_fragments)
          if len(regular_fragments) <= 1:
              self.log(u"  The list contains at most one regular fragment, returning")
              return
          faster_fragments = [(i, f) for i, f in regular_fragments if (f.rate is not None) and (f.rate >= max_rate + Decimal("0.001"))]
          if len(faster_fragments) == 0:
              self.log(u"  No regular fragment faster than max rate, returning")
              return
          self.log_warn(u"  Some fragments have rate faster than max rate:")
          self.log([u"  %s", [i for i, f in faster_fragments]])
          self.log(u"Fixing rate for faster fragments...")
          for frag_index, fragment in faster_fragments:
              self.smflist.fix_fragment_rate(frag_index, max_rate, aggressive=aggressive)
          self.log(u"Fixing rate for faster fragments... done")
          faster_fragments = [(i, f) for i, f in regular_fragments if (f.rate is not None) and (f.rate >= max_rate + Decimal("0.001"))]
          if len(faster_fragments) > 0:
              self.log_warn(u"  Some fragments still have rate faster than max rate:")
              self.log([u"  %s", [i for i, f in faster_fragments]])
docs: Try to adjust the rate (characters/second)
          of the fragments of the list,
          so that it does not exceed the given ``max_rate``.
  
          This is done by testing whether some slack
          can be borrowed from the fragment before
          the faster current one.
  
          If ``aggressive`` is ``True``,
          the slack might be retrieved from the fragment after
          the faster current one,
          if the previous fragment could not contribute enough slack.