class_docstr: Describe the basic building block of shuffle net, as described in
  `ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices <https://arxiv.org/pdf/1707.01083.pdf>`__.
  
  When stride = 1, the block expects an input with ``2 * input channels``. Otherwise input channels.
code: def _decode_point_depth_conv(self, sequence):
      result = []
      first_depth = first_point = True
      pc: int = self.channels
      c: int = self.channels
      for i, token in enumerate(sequence):
          # compute output channels of this conv
          if i + 1 == len(sequence):
              assert token == "p", "Last conv must be point-wise conv."
              c = self.oup_main
          elif token == "p" and first_point:
              c = cast(int, self.mid_channels)
          if token == "d":
              # depth-wise conv
              if isinstance(pc, int) and isinstance(c, int):
                  # check can only be done for static channels
                  assert (
                      pc == c
                  ), "Depth-wise conv must not change channels."
              result.append(
                  MutableConv2d(
                      pc,
                      c,
                      self.kernel_size,
                      self.stride if first_depth else 1,
                      self.pad,
                      groups=c,
                      bias=False,
                  )
              )
              result.append(MutableBatchNorm2d(c, affine=self.affine))
              first_depth = False
          elif token == "p":
              # point-wise conv
              result.append(MutableConv2d(pc, c, 1, 1, 0, bias=False))
              result.append(MutableBatchNorm2d(c, affine=self.affine))
              result.append(nn.ReLU(inplace=True))
              first_point = False
          else:
              raise ValueError("Conv sequence must be d and p.")
          pc = c
      return result
  
imports: from typing import Union, cast
  import torch
  import torch.nn
  import nni
  from nni.mutable import MutableExpression
  from nni.nas.nn.pytorch import LayerChoice, ModelSpace, MutableConv2d, MutableBatchNorm2d
  from .utils.pretrained import load_pretrained_weight
label_desc: Use image node_id 3 for calling the ShuffleNetBlock obj's underlying member method code with example usage: obj._decode_point_depth_conv(sequence) and returns: result