code: def test_nested_module(self):
      class ConvRelu(nn.Module):
          def __init__(self):
              super().__init__()
              self.conv = nn.Conv2d(3, 1, 3)
              self.relu = nn.ReLU()
  
          def forward(self, x):
              return self.relu(self.conv(x))
  
      class ConvNet(nn.Module):
          def __init__(self):
              super().__init__()
              self.conv = ConvRelu()
              self.pool = nn.MaxPool2d(kernel_size=2)
  
          def forward(self, x):
              return self.pool(self.conv(x))
  
      net = ConvNet()
      input = torch.randn((1, 3, 224, 224))
      model_ir = self._convert_model(net, input)
  
      # check if shape propagation works
      cell_node = model_ir.get_nodes_by_type("_cell")[0]
      self.assertEqual(
          cell_node.operation.attributes.get("input_shape"),
          [[1, 3, 224, 224]],
      )
      self.assertEqual(
          cell_node.operation.attributes.get("output_shape"),
          [[1, 1, 222, 222]],
      )
  
file_path: nni/test/algo/nas/graph_converter/test_convert_shape.py
imports: import unittest
  import torch
  import nni.nas.nn.pytorch.layers
  from nni.nas.nn.pytorch import LayerChoice, ModelSpace
  from .convert_mixin import ConvertWithShapeMixin
label_desc: Use image node_id 2 for calling the TestShape obj's underlying member method code with example usage: obj.test_nested_module() and returns: self, self