code: def clone_with_native_binary_convolutions(model):
      # using a different name to avoid conflict with netopt package.
      # netopt uses NativeBinaryConvolveFunction as the name.
      ops.register_native_user_function(
          "BinaryConvolutionFunction",
          "Cntk.BinaryConvolution-" + C.__version__.rstrip("+"),
          "CreateBinaryConvolveFunction",
      )
      filter = (
          lambda x: type(x) == C.Function
          and x.root_function.op_name == "binary_convolve"
      )
  
      def converter(x):
          # TODO: The attributes should be read from x instead of hardcoded values
          attributes = {
              "stride": 1,
              "padding": True,
              "size": x.inputs[0].shape[-1],
              "w": x.inputs[1].shape[-2],
              "h": x.inputs[1].shape[-1],
              "channels": x.inputs[1].shape[0],
              "filters": x.inputs[0].shape[0],
          }
          return ops.native_user_function(
              "BinaryConvolutionFunction",
              list(x.inputs),
              attributes,
              "native_binary_convolve",
          )
  
      return C.misc.convert(model, filter, converter)
  
file_path: CNTK/Examples/Extensibility/BinaryConvolution/binary_convnet.py
imports: import os
  import sys
  import cntk
  from custom_convolution_ops import *
  from ConvNet_CIFAR10_DataAug import *
label_desc: Use image node_id 3 for calling a global function with example usage: clone_with_native_binary_convolutions(model) and returns: C, ops