code: def test_builder_to_backend_programmatic_one_axis(
      self, use_cpu_only, backend, rank_and_axis
  ):
      rank, axis = rank_and_axis
      x_shape = np.random.randint(low=2, high=6, size=rank)
      input_placeholders = {"x": mb.placeholder(shape=x_shape)}
      input_values = {"x": np.random.sample(x_shape).astype(np.float32)}
  
      def build(x):
          return mb.expand_dims(x=x, axes=[axis])
  
      adjusted_axis = axis if axis >= 0 else rank + axis + 1
      x_shape = list(x_shape)
      out_shape = (
          x_shape[:adjusted_axis] + [1] + x_shape[adjusted_axis:]
      )
      expected_output_types = tuple(out_shape[:]) + (types.fp32,)
  
      run_compare_builder(
          build,
          input_placeholders,
          input_values,
          expected_output_types,
          np.expand_dims(input_values["x"], axis),
          use_cpu_only=use_cpu_only,
          frontend_only=False,
          backend=backend,
      )
  
imports: from coremltools.converters.mil import testing_reqs
  from coremltools.converters.mil.mil import get_new_symbol, get_new_variadic_symbol
  from coremltools.converters.mil.testing_reqs import *
  from .testing_utils import UNK_SYM, UNK_VARIADIC, run_compare_builder
label_desc: Use image node_id 4 for calling the TestExpandDims obj's underlying member method code with example usage: obj.test_builder_to_backend_programmatic_one_axis(use_cpu_only, backend, rank_and_axis) and returns: mb