code: def pipeline(names, steps):
      """Reconstruct a Pipeline from names and steps"""
      steps, times = zip(*map(_maybe_timed, steps))
      fit_time = sum(times)
      if any(s is FIT_FAILURE for s in steps):
          fit_est = FIT_FAILURE
      else:
          fit_est = Pipeline(list(zip(names, steps)))
      return fit_est, fit_time
  
imports: from __future__ import absolute_import, division, print_function
  import warnings
  from collections import defaultdict
  from threading import Lock
  from timeit import default_timer
  import numpy
  import packaging.version
  from dask.base import normalize_token
  from scipy import sparse
  from scipy.stats import rankdata
  from sklearn.exceptions import FitFailedWarning
  from sklearn.pipeline import FeatureUnion, Pipeline
  from sklearn.utils.validation import check_consistent_length
  from toolz import pluck
  from .._compat import Mapping
  from .utils import _index_param_value, _num_samples, _safe_indexing, copy_estimator
label_desc: Use image node_id 7 for calling a global function with example usage: pipeline(names, steps) and returns: fit_est,  fit_time