docstr: Launch tuning procedure for obtained pipeline by composer 
docstr_tok: ["Launch","tuning","procedure","for","obtained","pipeline","by","composer"]
code: def tune_final_pipeline(
      self, train_data: InputData, pipeline_gp_composed: Pipeline
  ) -> Pipeline:
      """Launch tuning procedure for obtained pipeline by composer"""
      timeout_for_tuning = (
          abs(self.timer.determine_resources_for_tuning()) / 60
      )
      tuner = (
          TunerBuilder(self.params.task)
          .with_tuner(SimultaneousTuner)
          .with_metric(self.metrics[0])
          .with_iterations(DEFAULT_TUNING_ITERATIONS_NUMBER)
          .with_timeout(datetime.timedelta(minutes=timeout_for_tuning))
          .with_eval_time_constraint(
              self.params.composer_requirements.max_graph_fit_time
          )
          .with_requirements(self.params.composer_requirements)
          .build(train_data)
      )
  
      if self.timer.have_time_for_tuning():
          # Tune all nodes in the pipeline
          with self.timer.launch_tuning():
              self.was_tuned = False
              self.log.message(
                  f"Hyperparameters tuning started with {round(timeout_for_tuning)} min. timeout"
              )
              tuned_pipeline = tuner.tune(pipeline_gp_composed)
              self.log.message("Hyperparameters tuning finished")
      else:
          self.log.message(
              f"Time for pipeline composing was {str(self.timer.composing_spend_time)}.\n"
              f"The remaining {max(0, round(timeout_for_tuning, 1))} seconds are not enough "
              f"to tune the hyperparameters."
          )
          self.log.message("Composed pipeline returned without tuning.")
          tuned_pipeline = pipeline_gp_composed
      self.was_tuned = tuner.was_tuned
      return tuned_pipeline
  
imports: import datetime
  import gc
  from copy import deepcopy
  from typing import List, Optional, Sequence, Tuple, Union
  from golem.core.log import default_log
  from golem.core.optimisers.opt_history_objects.opt_history import OptHistory
  from golem.core.tuning.simultaneous import SimultaneousTuner
  from fedot.api.api_utils.assumptions.assumptions_handler import AssumptionsHandler
  from fedot.api.api_utils.params import ApiParams
  from fedot.api.time import ApiTime
  from fedot.core.caching.pipelines_cache import OperationsCache
  from fedot.core.caching.preprocessing_cache import PreprocessingCache
  from fedot.core.composer.composer_builder import ComposerBuilder
  from fedot.core.composer.gp_composer.gp_composer import GPComposer
  from fedot.core.constants import DEFAULT_TUNING_ITERATIONS_NUMBER
  from fedot.core.data.data import InputData
  from fedot.core.pipelines.pipeline import Pipeline
  from fedot.core.pipelines.tuning.tuner_builder import TunerBuilder
  from fedot.core.repository.metrics_repository import MetricIDType
label_desc: Use image node_id 6 for calling the ApiComposer obj's underlying member method code with example usage: obj.tune_final_pipeline(train_data, pipeline_gp_composed) and returns: tuned_pipeline