code: def warp_by_flow(data, flow):
      N, C, H, W = data.shape
      out = np.ndarray(data.shape)
      for n in range(N):
          xx, yy = np.meshgrid(range(W), range(H))
          xf, yf = xx + flow[n, 0], yy + flow[n, 1]
          xL = np.maximum(0, np.minimum(W - 1, np.floor(xf))).astype(
              int
          )
          yT = np.maximum(0, np.minimum(H - 1, np.floor(yf))).astype(
              int
          )
          xR = np.maximum(
              0, np.minimum(W - 1, np.floor(xf + 1))
          ).astype(int)
          yB = np.maximum(
              0, np.minimum(H - 1, np.floor(yf + 1))
          ).astype(int)
          alpha = xf - np.floor(xf)
          beta = yf - np.floor(yf)
          for c in range(C):
              upper_left = data[n, c, yT, xL]
              lower_left = data[n, c, yB, xL]
              upper_right = data[n, c, yT, xR]
              lower_right = data[n, c, yB, xR]
              interp_upper = (
                  alpha * (upper_right - upper_left) + upper_left
              )
              interp_lower = (
                  alpha * (lower_right - lower_left) + lower_left
              )
              out[n, c] = (
                  beta * (interp_lower - interp_upper) + interp_upper
              )
      return out
  
imports: import pytest
  import numpy
  import nnabla.functions
  from nbla_test_utils import list_context, function_tester
label_desc: Use image node_id 1 for calling a global function with example usage: warp_by_flow(data, flow) and returns: out