code: def separable_conv2d(
      data,
      in_channels,
      out_channels,
      kernel,
      pad,
      setting_params,
      stride=(1, 1),
      factor=1,
      bias=False,
      bn_dw_out=True,
      act_dw_out=True,
      bn_pw_out=True,
      act_pw_out=True,
      dilate=1,
      name=None,
  ):
      bn_mom = setting_params["bn_mom"]
      bn_eps = setting_params["bn_eps"]
      fix_gamma = setting_params["fix_gamma"]
      use_global_stats = setting_params["use_global_stats"]
      workspace = setting_params["workspace"]
      group_base = setting_params["group_base"]
      act_type = setting_params["act_type"]
      assert in_channels % group_base == 0
  
      # depthwise
      dw_out = mx.sym.Convolution(
          data=data,
          num_filter=int(in_channels * factor),
          kernel=kernel,
          pad=pad,
          stride=stride,
          no_bias=False if bias else True,
          num_group=int(in_channels / group_base),
          dilate=(dilate, dilate),
          workspace=workspace,
          name=name + "_conv2d_depthwise",
      )
      if bn_dw_out:
          dw_out = mx.sym.BatchNorm(
              data=dw_out,
              fix_gamma=fix_gamma,
              eps=bn_eps,
              momentum=bn_mom,
              use_global_stats=use_global_stats,
              name=name + "_conv2d_depthwise_bn",
          )
      if act_dw_out:
          dw_out = Act(
              data=dw_out,
              act_type=act_type,
              name=name + "_conv2d_depthwise_act",
          )
      # pointwise
      pw_out = mx.sym.Convolution(
          data=dw_out,
          num_filter=out_channels,
          kernel=(1, 1),
          stride=(1, 1),
          pad=(0, 0),
          num_group=1,
          no_bias=False if bias else True,
          workspace=workspace,
          name=name + "_conv2d_pointwise",
      )
      if bn_pw_out:
          pw_out = mx.sym.BatchNorm(
              data=pw_out,
              fix_gamma=fix_gamma,
              eps=bn_eps,
              momentum=bn_mom,
              use_global_stats=use_global_stats,
              name=name + "_conv2d_pointwise_bn",
          )
      if act_pw_out:
          pw_out = Act(
              data=pw_out,
              act_type=act_type,
              name=name + "_conv2d_pointwise_act",
          )
      return pw_out
  
file_path: insightface/recognition/subcenter_arcface/symbol/vargfacenet.py
imports: import os
  import sys
  import mxnet
  import symbol_utils
  from config import config
label_desc: Use image node_id 4 for calling a global function with example usage: separable_conv2d(data, in_channels, out_channels, kernel, pad, setting_params, stride, factor, bias, bn_dw_out, act_dw_out, bn_pw_out, act_pw_out, dilate, name) and returns: pw_out