code: def _ghd_aux(mat, rowv, colv, ins_cost, del_cost, shift_cost_coeff):
      for i, rowi in enumerate(rowv):
          for j, colj in enumerate(colv):
              shift_cost = (
                  shift_cost_coeff * abs(rowi - colj) + mat[i, j]
              )
              if rowi == colj:
                  # boundaries are at the same location, no transformation required
                  tcost = mat[i, j]
              elif rowi > colj:
                  # boundary match through a deletion
                  tcost = del_cost + mat[i, j + 1]
              else:
                  # boundary match through an insertion
                  tcost = ins_cost + mat[i + 1, j]
              mat[i + 1, j + 1] = min(tcost, shift_cost)
  
label_desc: Use image node_id 3 for calling a global function with example usage: _ghd_aux(mat, rowv, colv, ins_cost, del_cost, shift_cost_coeff) without return types