code: def dynamic_conv_cpu(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
      h = n_channels // n_heads
  
      unfolded = unfold(inp, kernel_width, padding="causal")
      unfolded = tf.reshape(
          unfolded, [batch, seq, kernel_size, n_heads, h]
      )
      weights_expanded = tf.expand_dims(weights, 4)
      return tf.reshape(
          tf.reduce_sum(weights_expanded * unfolded, 2), shape_list(inp)
      )
  
file_path: finetune/finetune/custom_ops/indico_tf_ops/python/dynamic_conv.py
imports: import os
  import math
  import numpy
  import tensorflow
  from finetune.util.shapes import shape_list
  from finetune.custom_ops.indico_tf_ops.python import indico_ops
label_desc: Use image node_id 3 for calling a global function with example usage: dynamic_conv_cpu(inp, weights, padding) and returns: tf