code: def get_linear_interpolated_value(x_values, y_values, x):
      
      a = np.array(sorted(zip(x_values, y_values), key=lambda d: d[0]))
  
      ind = np.where(a[:, 0] >= x)[0]
  
      if len(ind) == 0 or ind[0] == 0:
          raise ValueError("x is out of range of provided x_values")
  
      i = ind[0]
      x1, x2 = a[i - 1][0], a[i][0]
      y1, y2 = a[i - 1][1], a[i][1]
  
      return y1 + (y2 - y1) / (x2 - x1) * (x - x1)
docs: Returns an interpolated value by linear interpolation between two values.
      This method is written to avoid dependency on scipy, which causes issues on
      threading servers.
  
      Args:
          x_values: Sequence of x values.
          y_values: Corresponding sequence of y values
          x: Get value at particular x
  
      Returns:
          Value at x.