class_docstr: Uniform Manifold Approximation and Projection
  
  Finds a low dimensional embedding of the data that approximates
  an underlying manifold.
  
  Adapted from https://github.com/lmcinnes/umap/blob/master/umap/umap_.py
  
  Examples
  --------
  .. code-block:: python
  
      >>> from dask_cuda import LocalCUDACluster
      >>> from dask.distributed import Client
      >>> import dask.array as da
      >>> from cuml.datasets import make_blobs
      >>> from cuml.manifold import UMAP
      >>> from cuml.dask.manifold import UMAP as MNMG_UMAP
      >>> import numpy as np
  
      >>> cluster = LocalCUDACluster(threads_per_worker=1)
      >>> client = Client(cluster)
  
      >>> X, y = make_blobs(1000, 10, centers=42, cluster_std=0.1,
      ...                   dtype=np.float32, random_state=10)
  
      >>> local_model = UMAP(random_state=10)
  
      >>> selection = np.random.RandomState(10).choice(1000, 100)
      >>> X_train = X[selection]
      >>> y_train = y[selection]
      >>> local_model.fit(X_train, y=y_train)
      UMAP()
  
      >>> distributed_model = MNMG_UMAP(model=local_model)
      >>> distributed_X = da.from_array(X, chunks=(500, -1))
      >>> embedding = distributed_model.transform(distributed_X)
      >>> result = embedding.compute()
      >>> print(result) # doctest: +SKIP
      [[  4.1684933    4.1890593 ]
      [  5.0110254   -5.2143383 ]
      [  1.7776365  -17.665699  ]
      ...
      [ -6.6378727   -0.15353012]
      [ -3.1891193   -0.83906937]
      [ -0.5042019    2.1454725 ]]
      >>> client.close()
      >>> cluster.close()
  
  Notes
  -----
  This module is heavily based on Leland McInnes' reference UMAP package
  [1]_.
  
  However, there are a number of differences and features that are
  not yet implemented in `cuml.umap`:
  
  * Using a non-Euclidean distance metric (support for a fixed set
    of non-Euclidean metrics is planned for an upcoming release).
  * Using a pre-computed pairwise distance matrix (under consideration
    for future releases)
  * Manual initialization of initial embedding positions
  
  In addition to these missing features, you should expect to see
  the final embeddings differing between `cuml.umap` and the reference
  UMAP. In particular, the reference UMAP uses an approximate kNN
  algorithm for large data sizes while cuml.umap always uses exact
  kNN.
  
  **Known issue:** If a UMAP model has not yet been fit, it cannot be pickled
  
  References
  ----------
  .. [1] `Leland McInnes, John Healy, James Melville
     UMAP: Uniform Manifold Approximation and Projection for Dimension
     Reduction. <https://arxiv.org/abs/1802.03426>`_
code: def __init__(self, *, model, client=None, **kwargs):
      super().__init__(client=client, **kwargs)
  
      self._set_internal_model(model)
  
imports: from cuml.dask.common.base import BaseEstimator, DelayedTransformMixin
  from cuml.dask.common.input_utils import DistributedDataHandler
label_desc: Use image node_id 1 to create a new UMAP object from inherited base classes: BaseEstimator, DelayedTransformMixin with example: obj = UMAP()