class_docstr: Time series K-medoids implementation.
  
  Parameters
  ----------
  n_clusters: int, defaults = 8
      The number of clusters to form as well as the number of
      centroids to generate.
  init_algorithm: str, np.ndarray (3d array of shape (n_clusters, n_dimensions,
      series_length)), defaults = 'forgy'
      Method for initializing cluster centers or an array of initial cluster centers.
      If string, any of the following strings are valid:
          ['kmeans++', 'random', 'forgy'].
      If 3D np.ndarray, initializes cluster centers with the provided array. The array
          must have shape (n_clusters, n_dimensions, series_length) and the number of
          clusters in the array must be the same as what is provided to the n_clusters
          argument.
  metric: str or Callable, defaults = 'dtw'
      Distance metric to compute similarity between time series. Any of the following
      are valid: ['dtw', 'euclidean', 'erp', 'edr', 'lcss', 'squared', 'ddtw', 'wdtw',
      'wddtw']
  n_init: int, defaults = 10
      Number of times the k-means algorithm will be run with different
      centroid seeds. The final result will be the best output of n_init
      consecutive runs in terms of inertia.
  max_iter: int, defaults = 30
      Maximum number of iterations of the k-means algorithm for a single
      run.
  tol: float, defaults = 1e-6
      Relative tolerance with regards to Frobenius norm of the difference
      in the cluster centers of two consecutive iterations to declare
      convergence.
  verbose: bool, defaults = False
      Verbosity mode.
  random_state: int or np.random.RandomState instance or None, defaults = None
      Determines random number generation for centroid initialization.
  distance_params: dict, defaults = None
      Dictionary containing kwargs for the distance metric being used.
  
  Attributes
  ----------
  cluster_centers_: np.ndarray (3d array of shape (n_clusters, n_dimensions,
      series_length))
      Time series that represent each of the cluster centers. If the algorithm stops
      before fully converging these will not be consistent with labels_.
  labels_: np.ndarray (1d array of shape (n_instance,))
      Labels that is the index each time series belongs to.
  inertia_: float
      Sum of squared distances of samples to their closest cluster center, weighted by
      the sample weights if provided.
  n_iter_: int
      Number of iterations run.
  
  Examples
  --------
  >>> from sktime.datasets import load_arrow_head
  >>> from sktime.clustering.k_medoids import TimeSeriesKMedoids
  >>> X_train, y_train = load_arrow_head(split="train")
  >>> X_test, y_test = load_arrow_head(split="test")
  >>> clusterer = TimeSeriesKMedoids(n_clusters=3)  # doctest: +SKIP
  >>> clusterer.fit(X_train)  # doctest: +SKIP
  TimeSeriesKMedoids(n_clusters=3)
  >>> y_pred = clusterer.predict(X_test)  # doctest: +SKIP
docstr: Fit time series clusterer to training data.
  
  Parameters
  ----------
  X : np.ndarray (2d or 3d array of shape (n_instances, series_length) or shape
      (n_instances, n_dimensions, series_length))
      Training time series instances to cluster.
  y: ignored, exists for API consistency reasons.
  
  Returns
  -------
  self:
      Fitted estimator.
code: def _fit(self, X: np.ndarray, y=None) -> np.ndarray:
      """Fit time series clusterer to training data.
  
      Parameters
      ----------
      X : np.ndarray (2d or 3d array of shape (n_instances, series_length) or shape
          (n_instances, n_dimensions, series_length))
          Training time series instances to cluster.
      y: ignored, exists for API consistency reasons.
  
      Returns
      -------
      self:
          Fitted estimator.
      """
      self._check_params(X)
      self._precomputed_pairwise = pairwise_distance(
          X, metric=self.metric, **self._distance_params
      )
      return super()._fit(X, y)
  
file_path: sktime/sktime/clustering/k_medoids.py
imports: from typing import Callable, Union
  import numpy
  from numpy.random import RandomState
  from sktime.clustering.metrics.medoids import medoids
  from sktime.clustering.partitioning import TimeSeriesLloyds
  from sktime.distances import pairwise_distance
label_desc: Use image node_id 2 for calling the TimeSeriesKMedoids obj's underlying member method code with example usage: obj._fit(X, y) and returns: super