class_docstr: Handles parameter management for classifiers composed of named estimators.
      
code: def _validate_names(self, names):
      if len(set(names)) != len(names):
          raise ValueError(
              "Names provided are not unique: "
              "{0!r}".format(list(names))
          )
      invalid_names = set(names).intersection(
          self.get_params(deep=False)
      )
      if invalid_names:
          raise ValueError(
              "Estimator names conflict with constructor "
              "arguments: {0!r}".format(sorted(invalid_names))
          )
      invalid_names = [name for name in names if "__" in name]
      if invalid_names:
          raise ValueError(
              "Estimator names must not contain __: got "
              "{0!r}".format(invalid_names)
          )
  
file_path: cuml/python/cuml/_thirdparty/sklearn/utils/skl_dependencies.py
imports: from cuml.internals.array_sparse import SparseCumlArray
  from ....internals.base import Base
  from ..utils.validation import check_X_y
  from ....thirdparty_adapters import check_array
label_desc: Use image node_id 4 for calling the BaseComposition obj's underlying member method code with example usage: obj._validate_names(names) without return types