In my understanding (from Fig.1 of the PU-Net paper), they are applying r different convolutional pipelines (each pipeline has 2 conv layers with its own weights) to get r different (non-linear) affine projections of point-features. i.e., N x C goes to r * (N x C2). I do not understand their reason for adding C_2 layer. However, its adding more capacity (parameters) to the model.
Implementation could be:

def __init__(...):
    self.expansion_set = nn.ModuleList()
    for i in range(r):
        self.expansion_set.append(nn.Sequential(nn.Conv1d(C, C1, kernel_size=1), 
                                           nn.ReLU(),
                                           nn.Conv1d(C1, C2, kernel_size=1)))

    ...

def forward(...):
    ...
    r_sets = []
    for i in range(r):
        r_set.append(self.expansion_set[i](features))