code: def define_empty_source_parallel_buckets(max_seq_len_target: int,
                                           bucket_width: int = 10) -> List[Tuple[int, int]]:
      
      target_step_size = max(1, bucket_width)
      target_buckets = define_buckets(max_seq_len_target, step=target_step_size)
      # source buckets are always 0 since there is no text
      source_buckets = [0 for b in target_buckets]
      target_buckets = [max(2, b) for b in target_buckets]
      parallel_buckets = list(zip(source_buckets, target_buckets))
      # deduplicate for return
      buckets = list(OrderedDict.fromkeys(parallel_buckets))
      buckets.sort()
      return buckets
docs: Returns (source, target) buckets up to (None, max_seq_len_target). The source
      is empty since it is supposed to not contain data that can be bucketized.
      The target is used as reference to create the buckets.
  
      :param max_seq_len_target: Maximum target bucket size.
      :param bucket_width: Width of buckets on longer side.