class_docstr: Checks to see if a join between two semantic models should be allowed.
class_docstr_tok: ["Checks","to","see","if","a","join","between","two","semantic","models","should","be","allowed","."]
docstr: List all semantic models that can join to given semantic model, and the entities to join them.
docstr_tok: ["List","all","semantic","models","that","can","join","to","given","semantic","model",",","and","the","entities","to","join","them","."]
code: def get_joinable_semantic_models(
      self,
      left_semantic_model_reference: SemanticModelReference,
      include_multi_hop: bool = False,
  ) -> Dict[str, SemanticModelLink]:
      """List all semantic models that can join to given semantic model, and the entities to join them."""
      semantic_model_joins: Dict[str, SemanticModelLink] = {}
      self._get_remaining_hops_of_joinable_semantic_models(
          left_semantic_model_reference=left_semantic_model_reference,
          parent_semantic_model_to_join_paths={
              left_semantic_model_reference: []
          },
          known_semantic_model_joins=semantic_model_joins,
          join_hops_remaining=(
              MAX_JOIN_HOPS if include_multi_hop else 1
          ),
      )
      return semantic_model_joins
  
file_path: metricflow/metricflow/model/semantics/semantic_model_join_evaluator.py
imports: from __future__ import annotations
  from dataclasses import dataclass
  from typing import Dict, List, Optional
  from dbt_semantic_interfaces.pretty_print import pformat_big_objects
  from dbt_semantic_interfaces.protocols.entity import EntityType
  from dbt_semantic_interfaces.references import EntityReference, SemanticModelElementReference, SemanticModelReference
  from metricflow.instances import EntityInstance, InstanceSet
  from metricflow.protocols.semantics import SemanticModelAccessor
label_desc: Use image node_id 2 for calling the SemanticModelJoinEvaluator obj's underlying member method code with example usage: obj.get_joinable_semantic_models(left_semantic_model_reference, include_multi_hop) and returns: semantic_model_joins