code: def shuffle_block_s2(inputs, output_c: int, stride: int, prefix: str):
      if stride != 2:
          raise ValueError("illegal stride value.")
  
      assert output_c % 2 == 0
      branch_c = output_c // 2
  
      # shortcut branch
      x1 = DWConvBN(
          kernel_size=3, strides=stride, name=prefix + "/b1_dw1"
      )(inputs)
      x1 = ConvBNReLU(filters=branch_c, name=prefix + "/b1_conv1")(x1)
  
      # main branch
      x2 = ConvBNReLU(filters=branch_c, name=prefix + "/b2_conv1")(
          inputs
      )
      x2 = DWConvBN(
          kernel_size=3, strides=stride, name=prefix + "/b2_dw1"
      )(x2)
      x2 = ConvBNReLU(filters=branch_c, name=prefix + "/b2_conv2")(x2)
  
      x = layers.Concatenate(name=prefix + "/concat")([x1, x2])
      x = ChannelShuffle(x.shape, name=prefix + "/channelshuffle")(x)
  
      return x
  
imports: import tensorflow
  from tensorflow.keras import layers, Model
label_desc: Use image node_id 2 for calling a global function with example usage: shuffle_block_s2(inputs, output_c, stride, prefix) and returns: x