class_docstr: Abstract class that implements time series Lloyds algorithm.
  
  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.
      Any of the following strings are valid: ['kmeans++', 'random', 'forgy']
  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.
class_docstr_tok: ["Abstract","class","that","implements","time","series","Lloyds","algorithm",".","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",".","Any","of","the","following","strings","are","valid",":","[","'kmeans++","'",",","'random","'",",","'forgy","'","]","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","."]
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.
docstr_tok: ["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):
      """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)
      if self.metric == "ddtw" or self.metric == "wddtw":
          X = average_of_slope_transform(X)
          if self.metric == "ddtw":
              self._distance_metric = distance_factory(
                  X[0], X[1], metric="dtw", **self._distance_params
              )
          else:
              self._distance_metric = distance_factory(
                  X[0], X[1], metric="wdtw", **self._distance_params
              )
      else:
          self._distance_metric = distance_factory(
              X[0], X[1], metric=self.metric, **self._distance_params
          )
      best_centers = None
      best_inertia = np.inf
      best_labels = None
      best_iters = self.max_iter
      for _ in range(self.n_init):
          labels, centers, inertia, n_iters = self._fit_one_init(X)
          if inertia < best_inertia:
              best_centers = centers
              best_labels = labels
              best_inertia = inertia
              best_iters = n_iters
  
      self.labels_ = best_labels
      self.inertia_ = best_inertia
      self.cluster_centers_ = best_centers
      self.n_iter_ = best_iters
      return self
  
imports: from abc import ABC, abstractmethod
  from typing import Callable, Tuple, Union
  import numpy
  from numpy.random import RandomState
  from sklearn.utils import check_random_state
  from sklearn.utils.extmath import stable_cumsum
  from sktime.clustering.base import BaseClusterer
  from sktime.clustering.metrics.averaging import mean_average
  from sktime.distances import distance_factory, pairwise_distance
  from sktime.distances._ddtw import average_of_slope_transform
label_desc: Use image node_id 3 for calling the TimeSeriesLloyds obj's underlying member method code with example usage: obj._fit(X, y) and returns: self