<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fit_transform(self, X, y=None):
 """ Fits the manifold on X and transforms the data to plot it on the axes. The optional y specified can be used to declare discrete colors. If the target is set to 'auto', this method also determines the target type, and therefore what colors will be used. Note also that fit records the amount of time it takes to fit the manifold and reports that information in the visualization. Parameters X : array-like of shape (n, m) A matrix or data frame with n instances and m features where m > 2. y : array-like of shape (n,), optional A vector or series with target values for each instance in X. This vector is used to determine the color of the points in X. Returns ------- self : Manifold Returns the visualizer object. """

        # Determine target type
        self._determine_target_color_type(y)

        # Compute classes and colors if target type is discrete
        if self._target_color_type == DISCRETE:
            self.classes_ = np.unique(y)

            color_kwargs = {'n_colors': len(self.classes_)}

            if isinstance(self.colors, str):
                color_kwargs['colormap'] = self.colors
            else:
                color_kwargs['colors'] = self.colors

            self._colors = resolve_colors(**color_kwargs)

        # Compute target range if colors are continuous
        elif self._target_color_type == CONTINUOUS:
            y = np.asarray(y)
            self.range_ = (y.min(), y.max())

        with Timer() as self.fit_time_:
            Xp = self.manifold.fit_transform(X)

        self.draw(Xp, y)
        return Xp