docstr: Called on coordinator after testing ends.
  
  :param trainer: The trainer instance.
  :type trainer: ludwig.models.trainer.Trainer
  :param progress_tracker: An object which tracks training progress.
  :type progress_tracker: ludwig.utils.trainer_utils.ProgressTracker
  :param save_path: The path to the directory model is saved in.
docstr_tok: ["Called","on","coordinator","after","testing","ends",".",":","param","trainer",":","The","trainer","instance",".",":","type","trainer",":","ludwig.models.trainer.Trainer",":","param","progress_tracker",":","An","object","which","tracks","training","progress",".",":","type","progress_tracker",":","ludwig.utils.trainer_utils.ProgressTracker",":","param","save_path",":","The","path","to","the","directory","model","is","saved","in","."]
code: def on_test_end(self, trainer, progress_tracker, save_path: str):
      """Called on coordinator after testing ends.
  
      :param trainer: The trainer instance.
      :type trainer: ludwig.models.trainer.Trainer
      :param progress_tracker: An object which tracks training progress.
      :type progress_tracker: ludwig.utils.trainer_utils.ProgressTracker
      :param save_path: The path to the directory model is saved in.
      """
      pass
  
imports: from abc import ABC
  from typing import Any, Callable, Dict, List, Union
  from ludwig.api_annotations import PublicAPI
  from ludwig.types import HyperoptConfigDict, ModelConfigDict, TrainingSetMetadataDict
label_desc: Use image node_id 28 for calling the Callback obj's underlying member method code with example usage: obj.on_test_end(trainer, progress_tracker, save_path) without return types