class_docstr: Returns a factored string if the model produces target factors. If there are no target factors the output
  is equivalent to StringOutputHandler
class_docstr_tok: ["Returns","a","factored","string","if","the","model","produces","target","factors",".","If","there","are","no","target","factors","the","output","is","equivalent","to","StringOutputHandler"]
docstr: :param t_input: Translator input.
  :param t_output: Translator output.
  :param t_walltime: Total walltime for translation.
docstr_tok: [":","param","t_input",":","Translator","input",".",":","param","t_output",":","Translator","output",".",":","param","t_walltime",":","Total","walltime","for","translation","."]
code: def handle(
      self,
      t_input: inference.TranslatorInput,
      t_output: inference.TranslatorOutput,
      t_walltime: float = 0.0,
  ):
      """
      :param t_input: Translator input.
      :param t_output: Translator output.
      :param t_walltime: Total walltime for translation.
      """
      factored_string = C.TOKEN_SEPARATOR.join(
          C.DEFAULT_FACTOR_DELIMITER.join(factors)
          for factors in zip(
              *chain([t_output.tokens], t_output.factor_tokens)
          )
      )
      print(factored_string, file=self.stream, flush=True)
  
imports: import json
  import sys
  from abc import ABC, abstractmethod
  from itertools import chain
  from typing import Optional
  import sockeye.constants
  from sockeye.utils import smart_open
  from .None import inference
label_desc: Use image node_id 2 for calling the FactoredStringOutputHandler obj's underlying member method code with example usage: obj.handle(t_input, t_output, t_walltime) without return types