code: def save_files(ctx, file_savers, filenames, extension=None):
      """save_file
      Save file, if filename is a ByteIO object, extension should be set
      Args:
          ctx: A object that represents the context of sharing states with loaders.
          file_savers (OrderedDict): List of handlers, tied with extension name.
          filename (str or ByteIO or str list): filename or filename list or file object
          extension (str): File extension name, used to identify the file type,
                           only filename is file object, it does work.
      Returns:
          None
      """
      if isinstance(filenames, list) or isinstance(filenames, tuple):
          pass
      elif isinstance(filenames, str) or hasattr(filenames, "read"):
          filenames = [filenames]
  
      file_supported = []
      for filename in filenames:
          if isinstance(filename, str):
              _, ext = os.path.splitext(filename)
          else:
              ext = extension
  
          supported = False
          for supported_ext, file_saver in file_savers.items():
              if ext in supported_ext:
                  file_saver(ctx, filename, ext)
                  supported = True
                  break
          file_supported.append(supported)
      return all(file_supported)
  
imports: import contextlib
  import io
  import os
  import re
  import zipfile
  from collections import OrderedDict
  from functools import partial
  import google.protobuf.text_format
  import h5py
  import nnabla
  import numpy
  from nnabla.logger import logger
  from nnabla.utils import nnabla_pb2
  from nnabla.utils.nnp_format import nnp_version
label_desc: Use image node_id 25 for calling a global function with example usage: save_files(ctx, file_savers, filenames, extension) and returns: all