code: def frame(data, window_length, hop_length):
      """Convert array into a sequence of successive possibly overlapping frames.
  
      An n-dimensional array of shape (num_samples, ...) is converted into an
      (n+1)-D array of shape (num_frames, window_length, ...), where each frame
      starts hop_length points after the preceding one.
  
      This is accomplished using stride_tricks, so the original data is not
      copied.  However, there is no zero-padding, so any incomplete frames at the
      end are not included.
  
      Args:
        data: np.array of dimension N >= 1.
        window_length: Number of samples in each frame.
        hop_length: Advance (in samples) between each window.
  
      Returns:
        (N+1)-D np.array with as many rows as there are complete frames that can be
        extracted.
      """
      num_samples = data.shape[0]
      num_frames = 1 + int(
          np.floor((num_samples - window_length) / hop_length)
      )
      shape = (num_frames, window_length) + data.shape[1:]
      strides = (data.strides[0] * hop_length,) + data.strides
      return np.lib.stride_tricks.as_strided(
          data, shape=shape, strides=strides
      )
  
imports: import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: frame(data, window_length, hop_length) and returns: np