code: def _assemble_translation(sequence: np.ndarray,
                                length: np.ndarray,
                                attention_lists: np.ndarray,
                                seq_score: np.ndarray,
                                beam_history: Optional[BeamHistory],
                                estimated_reference_length: Optional[float]) -> Translation:
          
          length = int(length)
          sequence = sequence[:length].tolist()
          attention_matrix = attention_lists[:length, :]
          score = float(seq_score)
          estimated_reference_length=float(estimated_reference_length) if estimated_reference_length else None
          beam_history_list = [beam_history] if beam_history is not None else []
          return Translation(sequence, attention_matrix, score, beam_history_list,
                             nbest_translations=None,
                             estimated_reference_length=estimated_reference_length)
docs: Takes a set of data pertaining to a single translated item, performs slightly different
          processing on each, and merges it into a Translation object.
          :param sequence: Array of word ids. Shape: (batch_size, bucket_key).
          :param length: The length of the translated segment.
          :param attention_lists: Array of attentions over source words.
                                  Shape: (batch_size * self.beam_size, max_output_length, encoded_source_length).
          :param seq_score: Array of length-normalized negative log-probs.
          :param estimated_reference_length: Estimated reference length (if any).
          :param beam_history: The optional beam histories for each sentence in the batch.
          :return: A Translation object.