code: def _save(original_fn, obj, f, *args, **kwargs):
      # see https://catboost.ai/en/docs/concepts/python-reference_catboost_save_model
      ret = original_fn(obj, f, *args, **kwargs)
      if not PatchCatBoostModelIO._current_task:
          return ret
      if isinstance(f, six.string_types):
          filename = f
      else:
          filename = None
      # give the model a descriptive name based on the file name
      # noinspection PyBroadException
      try:
          model_name = Path(filename).stem
      except Exception:
          model_name = None
      WeightsFileHandler.create_output_model(
          obj,
          filename,
          Framework.catboost,
          PatchCatBoostModelIO._current_task,
          singlefile=True,
          model_name=model_name,
      )
      return ret
  
file_path: clearml/clearml/binding/frameworks/catboost_bind.py
imports: import sys
  from pathlib2 import Path
  import six
  from ..frameworks import WeightsFileHandler, _Empty, _patched_call
  from ..frameworks.base_bind import PatchBaseModelIO
  from ..import_bind import PostImportHookPatching
  from ...model import Framework
label_desc: Use image node_id 3 for calling the PatchCatBoostModelIO obj's underlying member method code with example usage: obj._save(original_fn, obj, f) and returns: ret, ret