docstr: Input graph:
  
  main(%x: (1, 1, 4, 4, fp16)(Tensor)) {
    block0() {
      %pixel_unshuffle_0: (1, 4, 2, 2, fp16)(Tensor) = pixel_unshuffle(x=%x, downscale_factor=2, name="pixel_unshuffle_0")
    } -> (%pixel_unshuffle_0)
  }
  
  This function would be inferred as an iOS16 function, and the graph pass should behave properly
docstr_tok: ["Input","graph",":","main","(","%","x",":","(","1",",","1",",","4",",","4",",","fp16",")","(","Tensor",")",")","{","block0","(",")","{","%","pixel_unshuffle_0",":","(","1",",","4",",","2",",","2",",","fp16",")","(","Tensor",")","=","pixel_unshuffle","(","x=","%","x",",","downscale_factor=2",",","name=","''","pixel_unshuffle_0","''",")","}","-",">","(","%","pixel_unshuffle_0",")","}","This","function","would","be","inferred","as","an","iOS16","function",",","and","the","graph","pass","should","behave","properly"]
code: def test_float16_input_output_with_opset_version_inference(self):
      """
      Input graph:
  
      main(%x: (1, 1, 4, 4, fp16)(Tensor)) {
        block0() {
          %pixel_unshuffle_0: (1, 4, 2, 2, fp16)(Tensor) = pixel_unshuffle(x=%x, downscale_factor=2, name="pixel_unshuffle_0")
        } -> (%pixel_unshuffle_0)
      }
  
      This function would be inferred as an iOS16 function, and the graph pass should behave properly
      """
  
      @mb.program(
          input_specs=[
              mb.TensorSpec(shape=(1, 1, 4, 4), dtype=types.fp16)
          ]
      )
      def prog(x):
          x = mb.pixel_unshuffle(x=x, downscale_factor=np.uint32(2))
          return x
  
      prev_prog, prev_block, block = apply_pass_and_basic_check(
          prog, "mil_backend::adjust_io_to_supported_types"
      )
  
      prev_inputs = list(prev_block.inputs.items())
      inputs = list(block.inputs.items())
      prev_outputs = prev_block.outputs
      outputs = block.outputs
      assert prev_inputs[0][1].name == inputs[0][1].name
      assert outputs[0].name == prev_outputs[0].name
      assert get_op_types_in_program(prog) == ["pixel_unshuffle"]
      assert inputs[0][1].dtype == types.fp16
      assert block.outputs[0].dtype == types.fp16
  
imports: import copy
  import itertools
  import numpy
  import pytest
  import coremltools
  from coremltools.converters.mil._deployment_compatibility import AvailableTarget
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil import types
  from coremltools.converters.mil.mil.passes.pass_registry import PASS_REGISTRY
  from coremltools.converters.mil.testing_utils import apply_pass_and_basic_check, assert_model_is_valid, get_op_types_in_program
label_desc: Use image node_id 5 for calling the TestAdjustToSupportedTypes obj's underlying member method code with example usage: obj.test_float16_input_output_with_opset_version_inference() and returns: x