class_docstr: Container class for storing all linkable elements for a metric.
  
  TODO: There are similarities with LinkableSpecSet - consider consolidation.
code: def as_spec_set(self) -> LinkableSpecSet:  # noqa: D
      return LinkableSpecSet(
          dimension_specs=tuple(
              DimensionSpec(
                  element_name=path_key.element_name,
                  entity_links=path_key.entity_links,
              )
              for path_key in self.path_key_to_linkable_dimensions.keys()
              if not path_key.time_granularity
          ),
          time_dimension_specs=tuple(
              TimeDimensionSpec(
                  element_name=path_key.element_name,
                  entity_links=path_key.entity_links,
                  time_granularity=path_key.time_granularity,
                  date_part=path_key.date_part,
              )
              for path_key in self.path_key_to_linkable_dimensions.keys()
              if path_key.time_granularity
          ),
          entity_specs=tuple(
              EntitySpec(
                  element_name=path_key.element_name,
                  entity_links=path_key.entity_links,
              )
              for path_key in self.path_key_to_linkable_entities
          ),
      )
  
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 4 for calling the LinkableElementSet obj's underlying member method code with example usage: obj.as_spec_set() and returns: LinkableSpecSet