code: def ref_adaptive_separable_convolution(x, kv, kh):
      B, C, H, W = x.shape
      KV = kv.shape[1]
      KH = kh.shape[1]
      oH, oW = H - KV + 1, W - KH + 1
      y = np.zeros([B, C, oH, oW])
      for b in range(B):
          for h in range(oH):
              for w in range(oW):
                  approx_kernel = np.outer(
                      kv[b, :, h, w], kh[b, :, h, w]
                  )
                  y[b, :, h, w] = np.sum(
                      approx_kernel * x[b, :, h : h + KV, w : w + KH],
                      axis=(1, 2),
                  )
      return y
  
imports: import pytest
  import numpy
  import nnabla.functions
  from nbla_test_utils import list_context
label_desc: Use image node_id 1 for calling a global function with example usage: ref_adaptive_separable_convolution(x, kv, kh) and returns: y