code: def get_target_bucket(buckets: List[Tuple[int, int]],
                        length_target: int) -> Optional[Tuple[int, Tuple[int, int]]]:
      
      bucket = None, None  # type: Tuple[int, Tuple[int, int]]
      for j, (source_bkt, target_bkt) in enumerate(buckets):
          if target_bkt >= length_target:
              bucket = j, (source_bkt, target_bkt)
              break
      return bucket
docs: Returns bucket index and bucket from a list of buckets, given source and target length.
      Returns (None, None) if no bucket fits.
  
      :param buckets: List of buckets.
      :param length_target: Length of target sequence.
      :return: Tuple of (bucket index, bucket), or (None, None) if not fitting.