code: def _get_join_types_for_entity_type(
      entity_type: EntityType,
  ) -> Sequence[SemanticModelEntityJoinType]:
      """Exhaustively evaluate entity types and return a sequence of all possible join type pairs.
  
      The exhaustive conditional statically enforces that every entity type is handled on the left.
      The complete set of matching join types ensures that all pairs are used.
      """
      if (
          entity_type is EntityType.FOREIGN
          or entity_type is EntityType.PRIMARY
          or entity_type is EntityType.UNIQUE
          or entity_type is EntityType.NATURAL
      ):
          join_types = tuple(
              SemanticModelEntityJoinType(
                  left_entity_type=entity_type,
                  right_entity_type=join_type,
              )
              for join_type in EntityType
          )
          return join_types
      else:
          assert_values_exhausted(entity_type)
  
file_path: metricflow/metricflow/test/model/semantics/test_semantic_model_join_evaluator.py
imports: from __future__ import annotations
  from typing import Dict, Sequence
  from dbt_semantic_interfaces.enum_extension import assert_values_exhausted
  from dbt_semantic_interfaces.protocols.entity import EntityType
  from dbt_semantic_interfaces.references import EntityReference, SemanticModelReference
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.model.semantics.semantic_model_join_evaluator import SemanticModelEntityJoin, SemanticModelEntityJoinType, SemanticModelJoinEvaluator, SemanticModelLink
  from metricflow.test.fixtures.model_fixtures import ConsistentIdObjectRepository
label_desc: Use image node_id 1 for calling a global function with example usage: _get_join_types_for_entity_type(entity_type) and returns: join_types