code: def test_ethosu_conv2d_block_config_from_matcher(
      ifm_layout, ofm_layout, ifm_channels, expected_cycles
  ):
      ofm_channels = 10
      ifm_height = 123
      ifm_width = 155
  
      ifm_shape = (
          (1, ifm_height, ifm_width, ifm_channels)
          if ifm_layout == "NHWC"
          else (
              1,
              ifm_height,
              1 + ((ifm_channels - 1) // 16),
              ifm_width,
              16,
          )
      )
      weight_shape = (ofm_channels, 3, 3, ifm_channels)
      scale_bias_shape = (ofm_channels, 10)
  
      ifm = te.placeholder(ifm_shape, dtype="int8")
      weight = te.placeholder(weight_shape, dtype="int8")
      scale_bias = te.placeholder(scale_bias_shape, dtype="uint8")
      lut = te.placeholder((), dtype="uint8")
      out = conv2d_compute(
          ifm=ifm,
          weight=weight,
          scale_bias=scale_bias,
          lut=lut,
          ifm_scale=1,
          ifm_zero_point=0,
          ofm_scale=1,
          ofm_zero_point=0,
          weight_zero_point=0,
          strides=(1, 1),
          padding=(0, 0, 0, 0),
          dilation=(1, 1),
          activation="NONE",
          clip_min=0,
          clip_max=0,
          upscale="NONE",
          rounding_mode="TFL",
          ifm_layout=ifm_layout,
          ofm_layout=ofm_layout,
      )
  
      device_config = cs.EthosuDeviceConfig("ethos-u55-256")
      part = match_ethosu_conv2d(out, device_config)
  
      ofm_shape = [int(i) for i in part.subgraph.output_tensor.shape]
  
      # Add inputs and outputs to the part
      input_tensor = cs.Tensor(ifm_shape, "int8")
      part.set_input(0, input_tensor)
      weight_tensor = cs.Tensor(weight_shape, "int8")
      part.set_input(1, weight_tensor)
      scale_bias_tensor = cs.Tensor(scale_bias_shape, "int8")
      part.set_input(2, scale_bias_tensor)
      output_tensor = cs.Tensor(ofm_shape, "int8")
      part.set_output(output_tensor)
  
      # Create a stripe of a size of the output tensor
      order = [1, 2, 3, 4] if ofm_layout == "NHWC" else [1, 2, 4, 3, 0]
      stripes = [1] * len(order)
      offset = [0] * len(order)
  
      stripe_config = cs.StripeConfig(
          ofm_shape, ofm_shape, ofm_shape, order, stripes, offset
      )
  
      block = part.get_block_config(stripe_config)
  
      # Since we dont know the values of the variables we passed to the get_valid_block_configs in
      # the matcher, best we can do is to verify the compute cycle count since the channels have a
      # significant effect on it
      assert block.compute_cycles == expected_cycles
  
imports: import pytest
  from tvm import te
  import tvm.contrib.ethosu.cascader
  from tvm.relay.backend.contrib.ethosu.te.convolution import match_ethosu_conv2d, conv2d_compute
  from .infra import make_matrices
label_desc: Use image node_id 2 for calling a global function with example usage: test_ethosu_conv2d_block_config_from_matcher(ifm_layout, ofm_layout, ifm_channels, expected_cycles) without return types