code: def dynamic_convolution_op(inp, weights, padding="causal"):
      """
      inp : Batch Time Channels
      weights: Batch, Time, FilterWidth, Heads
      padding: causal or same
      """
      batch, seq, n_channels = shape_list(inp)
      _, _, kernel_width, n_heads = shape_list(weights)
      assert n_channels % n_heads == 0
  
      if padding.lower() == "causal":
          padding_l = kernel_width - 1
      elif padding.lower() == "same":
          padding_l = kernel_width // 2
      inp_formatted = tf.transpose(inp, [0, 2, 1])
      weights_formatted = tf.transpose(weights, [0, 3, 2, 1])
      return tf.transpose(
          kernels_module.dynamic_convolution(
              inp_formatted, weights_formatted, padding_l
          ),
          [0, 2, 1],
      )
  
file_path: finetune/finetune/custom_ops/indico_tf_ops/python/indico_ops.py
imports: import os
  import warnings
  import math
  import tensorflow
  from tensorflow.python.framework import ops
  from finetune.errors import FinetuneError
label_desc: Use image node_id 5 for calling a global function with example usage: dynamic_convolution_op(inp, weights, padding) and returns: tf