code: def sandwich_kernel(x, x_i):
      """
      Parameters
      ----------
      x : array-like
          points required to compute kernel weight
      x_i : array-like
          reference points location used to compute correspondent distance of each entry points
  
      Returns
      -------
      np.ndarray :
          2D array with size N x M such that
          N as the number of entry points
          M as the number of reference points
          matrix entries hold the value of weight of each element
  
      See Also
      --------
      1. https://mc-stan.org/docs/2_24/stan-users-guide/gaussian-process-regression.html
      2. https://en.wikipedia.org/wiki/Local_regression
      """
      N = len(x)
      M = len(x_i)
      k = np.zeros((N, M), dtype=np.double)
  
      np_idx = np.where(x < x_i[0])
      k[np_idx, 0] = 1
  
      for m in range(M - 1):
          np_idx = np.where(np.logical_and(x >= x_i[m], x < x_i[m + 1]))
          total_dist = x_i[m + 1] - x_i[m]
          backward_dist = x[np_idx] - x_i[m]
          forward_dist = x_i[m + 1] - x[np_idx]
          k[np_idx, m] = forward_dist / total_dist
          k[np_idx, m + 1] = backward_dist / total_dist
  
      np_idx = np.where(x >= x_i[M - 1])
      k[np_idx, M - 1] = 1
  
      # TODO: it is probably not needed
      k = k / np.sum(k, axis=1, keepdims=True)
  
      return k
  
imports: import numpy
label_desc: Use image node_id 3 for calling a global function with example usage: sandwich_kernel(x, x_i) and returns: k