class_docstr: Transform features in parallel as the union of many pipeline steps.
  
  This step is also available with true parallel processing threads or
  processes in the streaming package of Neuraxle.
  
  
  .. code-block:: python
  
      p = Pipeline([
          FeatureUnion([
              Mean(),
              Std(),
          ], joiner=NumpyConcatenateInnerFeatures())
      ])
  
      data_inputs = np.random.randint((1, 20))
  
  .. seealso::
      :class:`ModelStacking`,
      :class:`AddFeatures`,
      :class:`~neuraxle.base.ForceHandleOnlyMixin`,
      :class:`~neuraxle.base.TruncableSteps`,
      :class:`~neuraxle.base.BaseStep`
class_docstr_tok: ["Transform","features","in","parallel","as","the","union","of","many","pipeline","steps",".","This","step","is","also","available","with","true","parallel","processing","threads","or","processes","in","the","streaming","package","of","Neuraxle",".","..","code-block",":",":","python","p","=","Pipeline","(","[","FeatureUnion","(","[","Mean","(",")",",","Std","(",")",",","]",",","joiner=NumpyConcatenateInnerFeatures","(",")",")","]",")","data_inputs","=","np.random.randint","(","(","1",",","20",")",")","..","seealso",":",":",":","class",":","`","ModelStacking","`",",",":","class",":","`","AddFeatures","`",",",":","class",":","`","~neuraxle.base.ForceHandleOnlyMixin","`",",",":","class",":","`","~neuraxle.base.TruncableSteps","`",",",":","class",":","`","~neuraxle.base.BaseStep","`"]
docstr: Create a feature union.
  :param steps_as_tuple: the NamedStepsList of steps to process in parallel and to join.
  :param joiner: What will be used to join the features. ``NumpyConcatenateInnerFeatures()`` is used by default.
  :param n_jobs: The number of jobs for the parallelized ``joblib.Parallel`` loop in fit and in transform.
  :param backend: The type of parallelization to do with ``joblib.Parallel``. Possible values: "loky", "multiprocessing", "threading", "dask" if you use dask, and more.
docstr_tok: ["Create","a","feature","union",".",":","param","steps_as_tuple",":","the","NamedStepsList","of","steps","to","process","in","parallel","and","to","join",".",":","param","joiner",":","What","will","be","used","to","join","the","features",".","``","NumpyConcatenateInnerFeatures","(",")","``","is","used","by","default",".",":","param","n_jobs",":","The","number","of","jobs","for","the","parallelized","``","joblib.Parallel","``","loop","in","fit","and","in","transform",".",":","param","backend",":","The","type","of","parallelization","to","do","with","``","joblib.Parallel","``",".","Possible","values",":","``","loky","''",",","``","multiprocessing","''",",","``","threading","''",",","``","dask","''","if","you","use","dask",",","and","more","."]
code: def __init__(
      self,
      steps_as_tuple: NamedStepsList,
      joiner: BaseTransformer = None,
      n_jobs: int = None,
      backend: str = "threading",
      cache_folder_when_no_handle: str = None,
  ):
      """
      Create a feature union.
      :param steps_as_tuple: the NamedStepsList of steps to process in parallel and to join.
      :param joiner: What will be used to join the features. ``NumpyConcatenateInnerFeatures()`` is used by default.
      :param n_jobs: The number of jobs for the parallelized ``joblib.Parallel`` loop in fit and in transform.
      :param backend: The type of parallelization to do with ``joblib.Parallel``. Possible values: "loky", "multiprocessing", "threading", "dask" if you use dask, and more.
      """
      if joiner is None:
          joiner = NumpyConcatenateInnerFeatures()
      steps_as_tuple.append(("joiner", joiner))
      TruncableSteps.__init__(self, steps_as_tuple)
      ForceHandleOnlyMixin.__init__(
          self, cache_folder=cache_folder_when_no_handle
      )
      _TruncableServiceWithBodyMixin.__init__(self)
      self.n_jobs = n_jobs
      self.backend = backend
  
imports: from typing import Tuple
  from joblib import Parallel, delayed
  from neuraxle.base import CX, DACT, BaseStep, BaseTransformer, ForceHandleOnlyMixin, Identity, NamedStepsList, NonFittableMixin, TruncableSteps, _TruncableServiceWithBodyMixin
  from neuraxle.data_container import ZipDataContainer
  from neuraxle.steps.numpy import NumpyConcatenateInnerFeatures
label_desc: Use image node_id 1 to create a new FeatureUnion object from inherited base classes: _TruncableServiceWithBodyMixin, ForceHandleOnlyMixin, TruncableSteps with example: obj = FeatureUnion(steps_as_tuple, joiner, n_jobs, backend, cache_folder_when_no_handle)