class_docstr: Resolves group-by items for potentially ambiguous inputs that are specified in queries / filters.
docstr: Returns the finest time grain of metric_time for querying.
docstr_tok: ["Returns","the","finest","time","grain","of","metric_time","for","querying","."]
code: def resolve_min_metric_time_grain(self) -> TimeGranularity:
      """Returns the finest time grain of metric_time for querying."""
      metric_time_grain_resolution = (
          self.resolve_matching_item_for_querying(
              spec_pattern=TimeDimensionPattern.from_call_parameter_set(
                  TimeDimensionCallParameterSet(
                      entity_path=(),
                      time_dimension_reference=TimeDimensionReference(
                          element_name=METRIC_TIME_ELEMENT_NAME
                      ),
                  )
              ),
              suggestion_generator=None,
          )
      )
      metric_time_spec_set = (
          LinkableSpecSet.from_specs(
              (metric_time_grain_resolution.spec,)
          )
          if metric_time_grain_resolution.spec is not None
          else LinkableSpecSet.empty_instance()
      )
      if len(metric_time_spec_set.time_dimension_specs) != 1:
          raise RuntimeError(
              f"The grain for {repr(METRIC_TIME_ELEMENT_NAME)} could not be resolved. Got spec "
              f"{metric_time_grain_resolution.spec} and issues:\n\n"
              f"{indent(mf_pformat(metric_time_grain_resolution.issue_set))}"
          )
      return metric_time_spec_set.time_dimension_specs[
          0
      ].time_granularity
  
imports: from __future__ import annotations
  import logging
  from dataclasses import dataclass
  from typing import Optional, Tuple
  from dbt_semantic_interfaces.call_parameter_sets import TimeDimensionCallParameterSet
  from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME
  from dbt_semantic_interfaces.references import TimeDimensionReference
  from dbt_semantic_interfaces.type_enums import TimeGranularity
  from metricflow.mf_logging.formatting import indent
  from metricflow.mf_logging.pretty_print import mf_pformat
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.naming.object_builder_scheme import ObjectBuilderNamingScheme
  from metricflow.query.group_by_item.candidate_push_down.push_down_visitor import PushDownResult, _PushDownGroupByItemCandidatesVisitor
  from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag, ResolutionDagSinkNode
  from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath
  from metricflow.query.issues.group_by_item_resolver.ambiguous_group_by_item import AmbiguousGroupByItemIssue
  from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet
  from metricflow.query.suggestion_generator import QueryItemSuggestionGenerator
  from metricflow.specs.patterns.base_time_grain import BaseTimeGrainPattern
  from metricflow.specs.patterns.spec_pattern import SpecPattern
  from metricflow.specs.patterns.typed_patterns import TimeDimensionPattern
  from metricflow.specs.specs import LinkableInstanceSpec, LinkableSpecSet
label_desc: Use image node_id 5 for calling the GroupByItemResolver obj's underlying member method code with example usage: obj.resolve_min_metric_time_grain() and returns: metric_time_spec_set