class_docstr: Validates cases where a query requires metric_time to be specified as a group-by-item.
  
  Currently, known cases are:
  
  * Cumulative metrics.
  * Derived metrics with an offset time.g
code: def __init__(
      self, manifest_lookup: SemanticManifestLookup
  ) -> None:  # noqa: D
      super().__init__(manifest_lookup=manifest_lookup)
  
      metric_time_specs: List[TimeDimensionSpec] = []
  
      for time_granularity in TimeGranularity:
          metric_time_specs.append(
              TimeDimensionSpec(
                  element_name=METRIC_TIME_ELEMENT_NAME,
                  entity_links=(),
                  time_granularity=time_granularity,
                  date_part=None,
              )
          )
      for date_part in DatePart:
          for time_granularity in date_part.compatible_granularities:
              metric_time_specs.append(
                  TimeDimensionSpec(
                      element_name=METRIC_TIME_ELEMENT_NAME,
                      entity_links=(),
                      time_granularity=time_granularity,
                      date_part=date_part,
                  )
              )
  
      self._metric_time_specs = tuple(metric_time_specs)
  
imports: from __future__ import annotations
  from typing import List, Sequence
  from dbt_semantic_interfaces.enum_extension import assert_values_exhausted
  from dbt_semantic_interfaces.naming.keywords import METRIC_TIME_ELEMENT_NAME
  from dbt_semantic_interfaces.protocols import WhereFilterIntersection
  from dbt_semantic_interfaces.references import MetricReference
  from dbt_semantic_interfaces.type_enums import MetricType, TimeGranularity
  from dbt_semantic_interfaces.type_enums.date_part import DatePart
  from typing_extensions import override
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath
  from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet
  from metricflow.query.issues.parsing.cumulative_metric_requires_metric_time import CumulativeMetricRequiresMetricTimeIssue
  from metricflow.query.issues.parsing.offset_metric_requires_metric_time import OffsetMetricRequiresMetricTimeIssue
  from metricflow.query.resolver_inputs.query_resolver_inputs import ResolverInputForQuery
  from metricflow.query.validation_rules.base_validation_rule import PostResolutionQueryValidationRule
  from metricflow.specs.specs import TimeDimensionSpec
label_desc: Use image node_id 1 to create a new MetricTimeQueryValidationRule object from inherited base classes: PostResolutionQueryValidationRule with example: obj = MetricTimeQueryValidationRule(manifest_lookup)