code: def _outer_dot(v, X, n_samples, window_size, n_windows):
      X_new = np.empty((n_samples, window_size, window_size, n_windows))
      for i in prange(n_samples):
          for j in prange(window_size):
              X_new[i, j] = np.dot(
                  np.outer(v[i, :, j], v[i, :, j]), X[i]
              )
      return X_new
  
file_path: pyts/pyts/decomposition/ssa.py
imports: import numpy
  from math import ceil
  from numba import njit, prange
  from joblib import Parallel, delayed
  from sklearn.base import BaseEstimator
  from sklearn.utils.validation import check_array
  from ..base import UnivariateTransformerMixin
  from ..utils.utils import _windowed_view
label_desc: Use image node_id 1 for calling a global function with example usage: _outer_dot(v, X, n_samples, window_size, n_windows) and returns: X_new