code: def _warping_envelope_3d(
      X, n_samples_X, n_samples_Y, n_timestamps, region
  ):
      lower = np.empty((n_samples_X, n_samples_Y, n_timestamps))
      upper = np.empty((n_samples_X, n_samples_Y, n_timestamps))
      for i in prange(n_samples_X):
          for j in prange(n_samples_Y):
              for k in prange(n_timestamps):
                  sub_series = X[i, j, region[0, k] : region[1, k]]
                  lower[i, j, k] = np.min(sub_series)
                  upper[i, j, k] = np.max(sub_series)
      return lower, upper
  
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 7 for calling a global function with example usage: _warping_envelope_3d(X, n_samples_X, n_samples_Y, n_timestamps, region) and returns: lower,  upper