code: def python_water(
      img, phase_y, phase_x, freq_x, freq_y, ampl_x, ampl_y
  ):
      nh, nw = img.shape[:2]
      img_x = np.zeros((nh, nw), np.float32)
      img_y = np.zeros((nh, nw), np.float32)
      x_idx = np.arange(0, nw, 1, np.float32)
      y_idx = np.arange(0, nh, 1, np.float32)
      x_wave = ampl_y * np.cos(freq_y * x_idx + phase_y)
      y_wave = ampl_x * np.sin(freq_x * y_idx + phase_x)
      for x in range(nw):
          img_x[:, x] = y_wave + x - 0.5
  
      for y in range(nh):
          img_y[y, :] = x_wave + y - 0.5
  
      return cv2.remap(img, img_x, img_y, cv2.INTER_LINEAR)
  
imports: import nose_utils
  from nvidia.dali.pipeline import Pipeline
  import nvidia.dali.ops
  import nvidia.dali.fn
  import nvidia.dali.types
  import nvidia.dali
  import numpy
  import os
  import cv2
  from test_utils import compare_pipelines
  from test_utils import get_dali_extra_path
label_desc: Use image node_id 1 for calling a global function with example usage: python_water(img, phase_y, phase_x, freq_x, freq_y, ampl_x, ampl_y) and returns: cv2