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: Assign each instance to a cluster.
  
  This is done by computing the distance between each instance and
  each cluster. For each instance an index is returned that indicates
  which center had the smallest distance to it.
  
  Parameters
  ----------
  X : np.ndarray (3d array of shape (n_instances, n_dimensions, series_length))
      Time series instances to predict their cluster indexes.
  cluster_centres: np.ndarray (3d array of shape
                                  (n_clusters, n_dimensions, series_length))
      Cluster centers to assign to.
  
  Returns
  -------
  np.ndarray (1d array of shape (n_instance,))
      Array of indexes of each instance closest cluster.
  float
      Only returned when return_inertia is true. Float representing inertia of
      the assigned clusters.
docstr_tok: ["Assign","each","instance","to","a","cluster",".","This","is","done","by","computing","the","distance","between","each","instance","and","each","cluster",".","For","each","instance","an","index","is","returned","that","indicates","which","center","had","the","smallest","distance","to","it",".","Parameters","--","--","--","--","--","X",":","np.ndarray","(","3d","array","of","shape","(","n_instances",",","n_dimensions",",","series_length",")",")","Time","series","instances","to","predict","their","cluster","indexes",".","cluster_centres",":","np.ndarray","(","3d","array","of","shape","(","n_clusters",",","n_dimensions",",","series_length",")",")","Cluster","centers","to","assign","to",".","Returns","--","--","--","-","np.ndarray","(","1d","array","of","shape","(","n_instance",",",")",")","Array","of","indexes","of","each","instance","closest","cluster",".","float","Only","returned","when","return_inertia","is","true",".","Float","representing","inertia","of","the","assigned","clusters","."]
code: def _assign_clusters(
      self, X: np.ndarray, cluster_centres: np.ndarray
  ) -> Tuple[np.ndarray, float]:
      """Assign each instance to a cluster.
  
      This is done by computing the distance between each instance and
      each cluster. For each instance an index is returned that indicates
      which center had the smallest distance to it.
  
      Parameters
      ----------
      X : np.ndarray (3d array of shape (n_instances, n_dimensions, series_length))
          Time series instances to predict their cluster indexes.
      cluster_centres: np.ndarray (3d array of shape
                                      (n_clusters, n_dimensions, series_length))
          Cluster centers to assign to.
  
      Returns
      -------
      np.ndarray (1d array of shape (n_instance,))
          Array of indexes of each instance closest cluster.
      float
          Only returned when return_inertia is true. Float representing inertia of
          the assigned clusters.
      """
      pairwise = pairwise_distance(
          X,
          cluster_centres,
          metric=self.metric,
          **self._distance_params,
      )
      return pairwise.argmin(axis=1), pairwise.min(axis=1).sum()
  
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 6 for calling the TimeSeriesLloyds obj's underlying member method code with example usage: obj._assign_clusters(X, cluster_centres) and returns: pairwise,  pairwise