docstr: Compute the product between the Jacobian
  (a linear map from m x d to m x n) and a matrix E.
  
  Parameters
  ----------
  E: array-like, shape=(m, n)
      Second time series.
  
  Returns
  -------
  G: array-like, shape=(m, d)
      Product with Jacobian.
      ([m x d, m x n] * [m x n] = [m x d]).
docstr_tok: ["Compute","the","product","between","the","Jacobian","(","a","linear","map","from","m","x","d","to","m","x","n",")","and","a","matrix","E.","Parameters","--","--","--","--","--","E",":","array-like",",","shape=","(","m",",","n",")","Second","time","series",".","Returns","--","--","--","-","G",":","array-like",",","shape=","(","m",",","d",")","Product","with","Jacobian",".","(","[","m","x","d",",","m","x","n","]","*","[","m","x","n","]","=","[","m","x","d","]",")","."]
code: def jacobian_product(self, E):
      """Compute the product between the Jacobian
      (a linear map from m x d to m x n) and a matrix E.
  
      Parameters
      ----------
      E: array-like, shape=(m, n)
          Second time series.
  
      Returns
      -------
      G: array-like, shape=(m, d)
          Product with Jacobian.
          ([m x d, m x n] * [m x n] = [m x d]).
      """
      G = self.be.zeros_like(self.X, dtype=self.be.float64)
  
      if self.be.is_numpy:
          _njit_jacobian_product_sq_euc(
              self.X, self.Y, E.astype(np.float64), G
          )
      elif not self.compute_with_backend:
          _njit_jacobian_product_sq_euc(
              self.be.to_numpy(self.X),
              self.be.to_numpy(self.Y),
              self.be.to_numpy(E).astype(np.float64),
              self.be.to_numpy(G),
          )
          G = self.be.array(G)
      else:
          _jacobian_product_sq_euc(
              self.X, self.Y, self.be.cast(E, self.be.float64), G
          )
  
      return G
  
imports: import numpy
  from joblib import Parallel, delayed
  from numba import njit
  from sklearn.utils import check_random_state
  from tslearn.backend import instantiate_backend
  from tslearn.utils import check_equal_size, to_time_series, to_time_series_dataset, ts_size
  from .dtw_variants import dtw, dtw_path
  from .soft_dtw_fast import _jacobian_product_sq_euc, _njit_jacobian_product_sq_euc, _njit_soft_dtw, _njit_soft_dtw_grad, _soft_dtw, _soft_dtw_grad
  from .utils import _cdist_generic
label_desc: Use image node_id 3 for calling the SquaredEuclidean obj's underlying member method code with example usage: obj.jacobian_product(E) and returns: G