As far as I know, most channel compression methods generate a mask for each module in terms of channels. For example, we have a model defined by
class Net(nn.Module):
    def __init__(self):
        self.conv1 = nn.Conv2d(3, 10, 3)
        self.conv2 = nn.Conv2d(10, 20, 3)
        self.fc = nn.Linear(20,10)

    def forward(self, x):
        out = self.conv1(x)
        out = self.conv2(out)
        out = self.fc(out)
        return out

Suppose we generate a mask as below
{
    'conv1': 5,
    'conv2': 12,
}

The mask means that the output channel size of conv1 and conv2 can be compressed to 5 and 12. Now I know how to generate the mask, but I wonder Is any beautiful and simple method to  generate the new code
class Net(nn.Module):
    def __init__(self):
        self.conv1 = nn.Conv2d(3, 5, 3)
        self.conv2 = nn.Conv2d(5, 12, 3)
        self.fc = nn.Linear(12, 10)

    def forward(self, x):
        out = self.conv1(x)
        out = self.conv2(out)
        out = self.fc(out)
        return out

Besides, if the source code builds modules by functions (e.g., _make_layer in resnet), can we still generate the code based on the mask?