code: def __init__(
      self,
      x=None,
      centers=None,
      center_half_distances=None,
      n_clusters=None,
      sparse=None,
      gpu=None,
      output_types=None,
      **kw,
  ):
      super().__init__(
          _x=x,
          _centers=centers,
          _center_half_distances=center_half_distances,
          _n_clusters=n_clusters,
          sparse=sparse,
          gpu=gpu,
          _output_types=output_types,
          **kw,
      )
      if self._output_types is None:
          self._output_types = [OutputType.tensor] * self.output_limit
  
imports: import numpy
  from ...None import opcodes
  from ...core import OutputType, recursive_tile
  from ...core.operand import OperandStage
  from ...serialization.serializables import KeyField, Int32Field, BoolField
  from ...tensor.array_utils import as_same_device, device, cp, sparse
  from ...tensor.core import TensorOrder
  from ...utils import has_unknown_shape
  from ..operands import LearnOperand, LearnOperandMixin
  from ._k_means_common import _execute_merge_update, _relocate_empty_clusters
  from ._k_means_elkan import init_bounds_dense, init_bounds_sparse, update_chunk_dense, update_chunk_sparse
  from ._k_means_fast import update_center, update_upper_lower_bounds
label_desc: Use image node_id 1 to create a new KMeansElkanInitBounds object from inherited base classes: LearnOperand, LearnOperandMixin with example: obj = KMeansElkanInitBounds(x, centers, center_half_distances, n_clusters, sparse, gpu, output_types)