code: def lower_bound_yi(X_train, X_test):
      """Compute the "LB_Yi" lower bounds between two datasets.
  
      Parameters
      ----------
      X_train : array-like, shape = (n_samples_train, n_timestamps)
          Training set.
  
      X_test: : array-like, shape = (n_samples_test, n_timestamps)
          Test set.
  
      Returns
      -------
      lower_bounds : array, shape = (n_samples_test, n_samples_train)
          "LB_Yi" lower bounds.
  
      References
      ----------
      .. [1] B. K. Yi et al, "Efficient Retrieval of Similar Time Sequences
             Under Time Warping". International Conference on Data Engineering,
             201-208 (1998).
  
      Examples
      --------
      >>> X_train = [[5, 4, 3, 2, 1], [1, 8, 4, 3, 2], [6, 3, 5, 4, 7]]
      >>> X_test = [[2, 1, 8, 4, 5]]
      >>> lower_bound_yi(X_train, X_test)
      array([[3.        , 0.        , 2.44...]])
  
      """
      X_train = check_array(X_train)
      X_test = check_array(X_test)
      _check_consistent_lengths(X_train, X_test)
      X_train_min = np.min(X_train, axis=1)
      X_train_max = np.max(X_train, axis=1)
      X_test_min = np.min(X_test, axis=1)
      X_test_max = np.max(X_test, axis=1)
      lb_yi = _lower_bound_yi_X_Y(
          X_test,
          X_test_min,
          X_test_max,
          X_train,
          X_train_min,
          X_train_max,
      )
      return lb_yi
  
file_path: pyts/pyts/metrics/lower_bounds.py
imports: import numpy
  from math import sqrt
  from numba import njit, prange
  from sklearn.utils import check_array
label_desc: Use image node_id 4 for calling a global function with example usage: lower_bound_yi(X_train, X_test) and returns: lb_yi