code: def get_parallel_bucket(buckets: List[Tuple[int, int]],
                          length_source: int,
                          length_target: int) -> Tuple[Optional[int], Optional[Tuple[int, int]]]:
      
      for j, (source_bkt, target_bkt) in enumerate(buckets):
          if source_bkt >= length_source and target_bkt >= length_target:
              return j, (source_bkt, target_bkt)
      return None, None
docs: Returns bucket index and bucket from a list of buckets, given source and target length.
      Algorithm assumes buckets are sorted from shortest to longest.
      Returns (None, None) if no bucket fits.
  
      :param buckets: List of buckets, in sorted order, shortest to longest.
      :param length_source: Length of source sequence.
      :param length_target: Length of target sequence.
      :return: Tuple of (bucket index, bucket), or (None, None) if not fitting.