'Fit all transformers, transform the data and concatenate results.
Parameters
X : iterable or array-like, depending on transformers
Input data to be transformed.
y : array-like, shape (n_samples, ...), optional
Targets for supervised learning.
Returns
X_t : array-like or sparse matrix, shape (n_samples, sum_n_components)
hstack of results of transformers. sum_n_components is the
sum of n_components (output dimension) over transformers.'

def fit_transform(self, X, y=None, **fit_params):

    self._validate_transformers()
    result = Parallel(n_jobs=self.n_jobs)((delayed(_fit_transform_one)(trans, weight, X, y, **fit_params) for (name, trans, weight) in self._iter()))
    if (not result):
        return np.zeros((X.shape[0], 0))
    (Xs, transformers) = zip(*result)
    self._update_transformer_list(transformers)
    if any((sparse.issparse(f) for f in Xs)):
        Xs = sparse.hstack(Xs).tocsr()
    else:
        Xs = np.hstack(Xs)
    return Xs
