Try to answer my own question here after I read some posts again. Using groups can only lead to depthwise convolution, so setting, groups = in_channels = out_channels will fulfill the first part of the depthwise separable convolution, then we can manually add another 1x1 convolution to fulfill the second part based on Xception paper.
In my own conclusion, this is more like a “grouped convolution” like in this post 29 rather than the depthwise separable convolution or the “depthwise convolution”, the 1st step of the depthwise separable convolution (before the pointwise convolution).