code: def convolve(image, pixel_filter, channels=3, name=None):
    
    with tf.name_scope(name, 'convolve'):
      tf.compat.v1.assert_type(image, tf.float32)
      channel_filter = tf.eye(channels)
      filter_ = (tf.expand_dims(tf.expand_dims(pixel_filter, -1), -1) *
                 tf.expand_dims(tf.expand_dims(channel_filter, 0), 0))
      result_batch = tf.nn.conv2d(tf.stack([image]),  # batch
                                  filter=filter_,
                                  strides=[1, 1, 1, 1],
                                  padding='SAME')
      return result_batch[0]
docs: Perform a 2D pixel convolution on the given image.
  
    Arguments:
      image: A 3D `float32` `Tensor` of shape `[height, width, channels]`,
        where `channels` is the third argument to this function and the
        first two dimensions are arbitrary.
      pixel_filter: A 2D `Tensor`, representing pixel weightings for the
        kernel. This will be used to create a 4D kernel---the extra two
        dimensions are for channels (see `tf.nn.conv2d` documentation),
        and the kernel will be constructed so that the channels are
        independent: each channel only observes the data from neighboring
        pixels of the same channel.
      channels: An integer representing the number of channels in the
        image (e.g., 3 for RGB).
  
    Returns:
      A 3D `float32` `Tensor` of the same shape as the input.