code: def _print_evaluate(self, sample: Sample, data, print_fn):
      targets, outputs = sample.targets, sample.outputs
      gt_sentence = targets["sentence"]
      lr = "\u202A\u202B"
      s = ""
  
      pred_sentence = outputs.sentence
      cer = Levenshtein.distance(pred_sentence, gt_sentence) / len(
          gt_sentence
      )
      s += "\n  PRED (CER={:.2f}): '{}{}{}'".format(
          cer,
          lr[bidi.get_base_level(pred_sentence)],
          pred_sentence,
          "\u202C",
      ) + "\n  TRUE:            '{}{}{}'".format(
          lr[bidi.get_base_level(gt_sentence)], gt_sentence, "\u202C"
      )
  
      print_fn(s)
  
imports: from dataclasses import dataclass
  import tensorflow
  from typing import Dict, List, Tuple
  import bidi.algorithm
  import Levenshtein
  from paiargparse import pai_dataclass
  from tfaip import Sample
  from tfaip.model.modelbase import ModelBase
  from tfaip.util.tftyping import AnyTensor
  from calamari_ocr.ocr.model.params import ModelParams
  from tensorflow.python.ops import math_ops
  from calamari_ocr.ocr.model.ensemblegraph import EnsembleGraph
label_desc: Use image node_id 5 for calling the EnsembleModel obj's underlying member method code with example usage: obj._print_evaluate(sample, data, print_fn) without return types