class_docstr: Figures out what linkable specs are valid for a given metric.
  
  e.g. Can you query the metric "bookings" by "listing__country_latest"?
code: def _get_time_granularity_for_dimension(
      semantic_model: SemanticModel,
      time_dimension_reference: TimeDimensionReference,
  ) -> TimeGranularity:
      matching_dimensions = tuple(
          dimension
          for dimension in semantic_model.dimensions
          if dimension.type is DimensionType.TIME
          and dimension.time_dimension_reference
          == time_dimension_reference
      )
  
      if len(matching_dimensions) != 1:
          raise RuntimeError(
              f"Did not find a matching time dimension for {time_dimension_reference} in {semantic_model}"
          )
      time_dimension = matching_dimensions[0]
      type_params = time_dimension.type_params
      assert (
          type_params is not None
      ), f"type_params should have been set for {time_dimension_reference} in {semantic_model}"
  
      assert (
          type_params.time_granularity is not None
      ), f"time_granularity should have been set for {time_dimension_reference} in {semantic_model}"
  
      return type_params.time_granularity
  
imports: from __future__ import annotations
  import logging
  import time
  from collections import defaultdict
  from dataclasses import dataclass
  from typing import Dict, FrozenSet, List, Optional, Sequence, Set, Tuple
  from dbt_semantic_interfaces.enum_extension import assert_values_exhausted
  from dbt_semantic_interfaces.pretty_print import pformat_big_objects
  from dbt_semantic_interfaces.protocols.dimension import Dimension, DimensionType
  from dbt_semantic_interfaces.protocols.semantic_manifest import SemanticManifest
  from dbt_semantic_interfaces.protocols.semantic_model import SemanticModel
  from dbt_semantic_interfaces.references import DimensionReference, MeasureReference, MetricReference, SemanticModelReference, TimeDimensionReference
  from dbt_semantic_interfaces.type_enums import MetricType
  from dbt_semantic_interfaces.type_enums.date_part import DatePart
  from dbt_semantic_interfaces.type_enums.time_granularity import TimeGranularity
  from metricflow.dataset.dataset import DataSet
  from metricflow.errors.errors import UnknownMetricLinkingError
  from metricflow.model.semantics.linkable_element_properties import LinkableElementProperties
  from metricflow.model.semantics.semantic_model_join_evaluator import SemanticModelJoinEvaluator
  from metricflow.model.semantics.semantic_model_lookup import SemanticModelLookup
  from metricflow.protocols.semantics import SemanticModelAccessor
  from metricflow.specs.specs import DEFAULT_TIME_GRANULARITY, DimensionSpec, EntityReference, EntitySpec, LinkableSpecSet, TimeDimensionSpec
label_desc: Use image node_id 5 for calling the ValidLinkableSpecResolver obj's underlying member method code with example usage: obj._get_time_granularity_for_dimension(semantic_model, time_dimension_reference) and returns: type_params