code: def ctw(
      s1,
      s2,
      max_iter=100,
      n_components=None,
      global_constraint=None,
      sakoe_chiba_radius=None,
      itakura_max_slope=None,
      verbose=False,
      be=None,
  ):
      """Compute Canonical Time Warping (CTW) similarity measure between
      (possibly multidimensional) time series and return the similarity.
  
      Canonical Time Warping is a method to align time series under rigid
      registration of the feature space.
      It should not be confused with Dynamic Time Warping (DTW), though CTW uses
      DTW.
  
      It is not required that both time series share the same size, nor the same
      dimension (CTW will find a subspace that best aligns feature spaces).
      CTW was originally presented in [1]_.
  
      Parameters
      ----------
      s1 : array-like, shape=(sz1, d) or (sz1,)
          A time series. If shape is (sz1,), the time series is assumed to be univariate.
      s2 : array-like, shape=(sz2, d) or (sz2,)
          Another time series. If shape is (sz2,), the time series is assumed to be univariate.
      max_iter : int (default: 100)
          Number of iterations for the CTW algorithm. Each iteration
      n_components : int (default: None)
          Number of components to be used for Canonical Correlation Analysis.
          If None, the lower minimum number of features between seq1 and seq2 is
          used.
      global_constraint : {"itakura", "sakoe_chiba"} or None (default: None)
          Global constraint to restrict admissible paths for DTW calls.
      sakoe_chiba_radius : int or None (default: None)
          Radius to be used for Sakoe-Chiba band global constraint.
          If None and `global_constraint` is set to "sakoe_chiba", a radius of
          1 is used.
          If both `sakoe_chiba_radius` and `itakura_max_slope` are set,
          `global_constraint` is used to infer which constraint to use among the
          two. In this case, if `global_constraint` corresponds to no global
          constraint, a `RuntimeWarning` is raised and no global constraint is
          used.
      itakura_max_slope : float or None (default: None)
          Maximum slope for the Itakura parallelogram constraint.
          If None and `global_constraint` is set to "itakura", a maximum slope
          of 2. is used.
          If both `sakoe_chiba_radius` and `itakura_max_slope` are set,
          `global_constraint` is used to infer which constraint to use among the
          two. In this case, if `global_constraint` corresponds to no global
          constraint, a `RuntimeWarning` is raised and no global constraint is
          used.
      verbose : bool (default: True)
          If True, scores are printed at each iteration of the algorithm.
      be : Backend object or string or None
          Backend. If `be` is an instance of the class `NumPyBackend` or the string `"numpy"`,
          the NumPy backend is used.
          If `be` is an instance of the class `PyTorchBackend` or the string `"pytorch"`,
          the PyTorch backend is used.
          If `be` is `None`, the backend is determined by the input arrays.
          See our :ref:`dedicated user-guide page <backend>` for more information.
  
      Returns
      -------
      float
          Similarity score
  
      Examples
      --------
      >>> ctw([1, 2, 3], [1., 2., 2., 3.])
      0.0
      >>> ctw([1, 2, 3], [[1., 1.], [2., 2.], [2., 2.], [3., 3.]])
      0.0
  
      See Also
      --------
      ctw : Get only the similarity score for CTW
  
      References
      ----------
      .. [1] F. Zhou and F. Torre, "Canonical time warping for alignment of
         human behavior". NIPS 2009.
      """
      be = instantiate_backend(be, s1, s2)
      s1 = be.array(s1)
      s2 = be.array(s2)
      return ctw_path(
          s1=s1,
          s2=s2,
          max_iter=max_iter,
          n_components=n_components,
          global_constraint=global_constraint,
          sakoe_chiba_radius=sakoe_chiba_radius,
          itakura_max_slope=itakura_max_slope,
          verbose=verbose,
          be=be,
      )[-1]
  
file_path: tslearn/tslearn/metrics/ctw.py
imports: import numpy
  from sklearn.cross_decomposition import CCA
  from tslearn.backend import instantiate_backend
  from ..utils import to_time_series
  from .dtw_variants import dtw_path
  from .utils import _cdist_generic
label_desc: Use image node_id 3 for calling a global function with example usage: ctw(s1, s2, max_iter, n_components, global_constraint, sakoe_chiba_radius, itakura_max_slope, verbose, be) and returns: ctw_path