code: def resolve_reshape_params(inputs, function_proto, batch_size):
      """Resolve shape parameter and returns shape."""
      f = function_proto  # alias
  
      # There are 2 exceptional cases.
      # A. Negative dimension is batch dimension
      # A-1. Detect multiple negative dimensions (not allowed).
      negative_count = 0
      for d in f.reshape_param.shape.dim:
          if d < 0:
              negative_count += 1
      if negative_count > 1:
          raise ValueError(
              "Reshape: shape has multiple negative number."
          )
  
      # A-2. Fill negative dimensions with batch size.
      shape = tuple(
          [
              d if d >= 0 else batch_size
              for d in f.reshape_param.shape.dim
          ]
      )
  
      # B. Console omits batch dimensions (the first dimension) during saving.
      # B-1. Fill with batch size if shapes don't match.
      if numpy.prod(shape) != numpy.prod(inputs[0].shape):
          shape = (batch_size,) + shape
          if numpy.prod(shape) != numpy.prod(inputs[0].shape):
              raise ValueError(
                  "Shape after filling batch dimension does not match the input shape. prod({}) != prod({})".format(
                      shape, inputs[0].shape
                  )
              )
      return shape
  
imports: from collections import OrderedDict
  import google.protobuf.text_format
  import itertools
  import numpy
  import os
  import re
  import shutil
  import tempfile
  from nnabla.initializer import NormalInitializer, UniformInitializer, ConstantInitializer, RangeInitializer, calc_normal_std_he_forward, calc_normal_std_he_backward, calc_normal_std_glorot, calc_uniform_lim_glorot
  from nnabla.logger import logger
  from nnabla.parameter import get_parameter_or_create
  from nnabla.utils import nnabla_pb2
  from nnabla.utils.data_iterator import data_iterator_csv_dataset, data_iterator_cache
  from nnabla.utils.create_cache import CreateCache
  from nnabla.utils.load_function import _create_function_instance
  from nnabla.utils.nnp_format import nnp_version
  from nnabla.utils.communicator_util import current_communicator, single_or_rankzero
  from nnabla.utils.learning_rate_scheduler import PolynomialScheduler, CosineScheduler, ExponentialScheduler, StepScheduler, LinearWarmupScheduler
  from legacy_network import Network
  from nnabla.utils.progress import progress
  from legacy_get_file_handle import get_file_handle_load, get_buf_type
  import nnabla
  import nnabla.function
  import nnabla.solver
label_desc: Use image node_id 1 for calling a global function with example usage: resolve_reshape_params(inputs, function_proto, batch_size) and returns: shape