code: def emit_SeparableConv(self, IR_node):
      input_name = self.IR_graph.get_parent(IR_node.name, [0]).real_name
      output_name = IR_node.real_name
  
      strides = IR_node.get_attr("strides")
      stride_height, stride_width = (strides[1], strides[2])
  
      # Get the weights
      W0 = self.weights_dict[IR_node.name]["depthwise_filter"]
      W1 = self.weights_dict[IR_node.name]["pointwise_filter"]
  
      padding = IR_node.get_attr("auto_pad").split("_")[0].lower()
      has_bias = IR_node.get_attr("use_bias")
      b = self.weights_dict[IR_node.name]["bias"] if has_bias else None
  
      output_blob_shape = IR_node.get_attr("_output_shapes")
      shape = shape_to_list(output_blob_shape[0])
      output_channels = shape[-1]
  
      height, width, input_channels, depth_mult = W0.shape
  
      W0 = np.reshape(
          W0, (height, width, 1, input_channels * depth_mult)
      )
  
      intermediate_name = input_name + "_intermin_"
  
      self.builder.add_convolution(
          name=IR_node.name + "_step_1",
          kernel_channels=1,
          output_channels=input_channels * depth_mult,
          height=height,
          width=width,
          stride_height=stride_height,
          stride_width=stride_width,
          border_mode=padding,
          groups=input_channels,
          W=W0,
          b=None,
          has_bias=False,
          is_deconv=False,
          output_shape=None,
          input_name=input_name,
          output_name=intermediate_name,
          dilation_factors=[1, 1],
      )
  
      self.builder.add_convolution(
          name=IR_node.name + "_step_2",
          kernel_channels=input_channels * depth_mult,
          output_channels=output_channels,
          height=1,
          width=1,
          stride_height=1,
          stride_width=1,
          border_mode=padding,
          groups=1,
          W=W1,
          b=b,
          has_bias=has_bias,
          is_deconv=False,
          output_shape=None,
          input_name=intermediate_name,
          output_name=output_name,
          dilation_factors=[1, 1],
      )
  
imports: from __future__ import division
  import os
  import numpy
  from six import string_types
  from mmdnn.conversion.common.IR.IR_graph import IRGraph, IRGraphNode
  import mmdnn.conversion.common.IR.graph_pb2
  from mmdnn.conversion.common.IR.graph_pb2 import NodeDef, GraphDef, DataType
  from mmdnn.conversion.common.DataStructure.emitter import Emitter
  from mmdnn.conversion.common.utils import *
  from mmdnn.conversion.coreml.coreml_utils import _infer_coreml_input_shape
  from coremltools.models.neural_network import NeuralNetworkBuilder
  from coremltools.models import datatypes
  from coremltools.models import MLModel
  from coremltools.models.utils import save_spec
label_desc: Use image node_id 45 for calling the CoreMLEmitter obj's underlying member method code with example usage: obj.emit_SeparableConv(IR_node) without return types