code: def restore_optimizer_state(optimizer):
      optimizer.solver.set_states_from_protobuf(optimizer.proto)
      if hasattr(optimizer, "solver_checkpoint"):
          ext, handler = optimizer.solver_checkpoint
          if ext == ".protobuf":
              optimizer.solver.set_states_from_protobuf(handler)
          elif ext == ".h5":
              from nnabla.utils.get_file_handle import (
                  load_solve_state_from_h5,
              )
  
              optimizer.solver.set_states(
                  load_solve_state_from_h5(None, handler)
              )
              handler.seek(0)
  
imports: import itertools
  import os
  import re
  from collections import OrderedDict
  import nnabla
  import nnabla.functions
  import nnabla.solver
  import numpy
  from nnabla.core.graph_optimizer import IdentityRemover
  from nnabla.initializer import NormalInitializer, UniformInitializer, ConstantInitializer, RangeInitializer
  from nnabla.logger import logger
  from nnabla.utils import nnabla_pb2
  from nnabla.utils.communicator_util import current_communicator, single_or_rankzero
  from nnabla.utils.create_cache import CreateCache
  from nnabla.utils.data_iterator import data_iterator_csv_dataset, data_iterator_cache
  from nnabla.utils.get_file_handle import get_initial_file_loader, load_files
  from nnabla.utils.learning_rate_scheduler import PolynomialScheduler, CosineScheduler, ExponentialScheduler, StepScheduler, LinearWarmupScheduler
label_desc: Use image node_id 14 for calling a global function with example usage: restore_optimizer_state(optimizer) without return types