code: def multihop_dataflow_plan_builder(  # noqa: D
      multi_hop_join_semantic_manifest_lookup: SemanticManifestLookup,
      consistent_id_object_repository: ConsistentIdObjectRepository,
      time_spine_source: TimeSpineSource,
  ) -> DataflowPlanBuilder:
      return DataflowPlanBuilder(
          source_nodes=consistent_id_object_repository.multihop_model_source_nodes,
          read_nodes=list(
              consistent_id_object_repository.multihop_model_read_nodes.values()
          ),
          semantic_manifest_lookup=multi_hop_join_semantic_manifest_lookup,
      )
  
imports: from __future__ import annotations
  import pytest
  from metricflow.dataflow.builder.dataflow_plan_builder import DataflowPlanBuilder
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.plan_conversion.column_resolver import DunderColumnAssociationResolver
  from metricflow.plan_conversion.time_spine import TimeSpineSource
  from metricflow.protocols.sql_client import SqlClient
  from metricflow.query.query_parser import MetricFlowQueryParser
  from metricflow.specs.column_assoc import ColumnAssociationResolver
  from metricflow.test.fixtures.model_fixtures import ConsistentIdObjectRepository
  from metricflow.test.fixtures.setup_fixtures import MetricFlowTestSessionState
  from metricflow.test.fixtures.sql_client_fixtures import sql_client
label_desc: Use image node_id 5 for calling a global function with example usage: multihop_dataflow_plan_builder(multi_hop_join_semantic_manifest_lookup, consistent_id_object_repository, time_spine_source) and returns: DataflowPlanBuilder