code: def _setup_convolution_parameters(
      parameters, input_tensor, is_ceil_pad=False
  ):
      # considering the ceil and floor padding of bvlccaffe
      kernel_size = _format_to_list(parameters.kernel_size, 2)
      kernel_size[0] = parameters.kernel_h or kernel_size[0]
      kernel_size[1] = parameters.kernel_w or kernel_size[1]
      strides = _format_to_list(parameters.stride, 2, 1)
      strides[0] = parameters.stride_h or strides[0]
      strides[1] = parameters.stride_w or strides[1]
      lower_pad = _format_to_list(parameters.pad, 2, 0)
      lower_pad[0] = parameters.pad_h or lower_pad[0]
      lower_pad[1] = parameters.pad_w or lower_pad[1]
      dilation = [1] * 2
      if (
          hasattr(parameters, "dilation")
          and len(parameters.dilation) != 0
      ):
          dilation[0] = parameters.dilation[0]
          dilation[1] = (
              parameters.dilation[1]
              if len(parameters.dilation) > 1
              else parameters.dilation[0]
          )
      input_size = input_tensor[1:]
      output_size = [0] * 2
      for i in range(2):
          kernel_expand = (kernel_size[i] - 1) * dilation[i] + 1
          precise_size = (
              float(input_size[i] + 2 * lower_pad[i] - kernel_expand)
              / strides[i]
              + 1
          )
          output_size[i] = (
              int(math.ceil(precise_size))
              if is_ceil_pad
              else int(math.floor(precise_size))
          )
      pad = True if lower_pad[0] or lower_pad[1] else False
      return kernel_size, strides, output_size, pad, dilation
  
imports: import sys
  import os
  import time
  import math
  from cntk.contrib.crosstalkcaffe.unimodel import cntkmodel
  from cntk.contrib.crosstalkcaffe.adapter import baseadapter
  from .None import caffeimpl
label_desc: Use image node_id 2 for calling a global function with example usage: _setup_convolution_parameters(parameters, input_tensor, is_ceil_pad) and returns: kernel_size,  strides,  output_size,  pad,  dilation