code: def generate_so_complex_pipeline():
      node_imp = PipelineNode("simple_imputation")
      node_lagged = PipelineNode("lagged", nodes_from=[node_imp])
      node_ridge = PipelineNode("ridge", nodes_from=[node_lagged])
      node_decompose = PipelineNode(
          "decompose", nodes_from=[node_lagged, node_ridge]
      )
      node_pca = PipelineNode("pca", nodes_from=[node_decompose])
      node_final = PipelineNode(
          "ridge", nodes_from=[node_ridge, node_pca]
      )
      pipeline = Pipeline(node_final)
      return pipeline
  
imports: from copy import deepcopy
  from random import choice
  import numpy
  import pytest
  from golem.core.dag.graph_node import GraphNode
  from golem.core.dag.graph_verifier import GraphVerifier
  from golem.core.dag.verification_rules import DEFAULT_DAG_RULES
  from golem.core.optimisers.graph import OptNode
  from fedot.core.operations.operation import Operation
  from fedot.core.pipelines.adapters import PipelineAdapter
  from fedot.core.pipelines.node import PipelineNode
  from fedot.core.pipelines.pipeline import Pipeline
  from fedot.core.pipelines.pipeline_builder import PipelineBuilder
  from test.unit.dag.test_graph_utils import find_first
  from test.unit.tasks.test_regression import get_synthetic_regression_data
label_desc: Use image node_id 2 for calling a global function with example usage: generate_so_complex_pipeline() and returns: pipeline