class_docstr: A visitor that implements the logic for group-by-item resolution using the resolution DAG.
  
  Please see the behavior at each node for more details. Overall, this visitor pushes candidates that match an
  ambiguous group-by-item pattern from the root nodes (representing measures / the specs available for those
  measures) to the leaf node (the query for metrics / valid group-by items for querying). For nodes with multiple
  parents, the candidates from each parent are intersected and passed to the child node.
class_docstr_tok: ["A","visitor","that","implements","the","logic","for","group-by-item","resolution","using","the","resolution","DAG",".","Please","see","the","behavior","at","each","node","for","more","details",".","Overall",",","this","visitor","pushes","candidates","that","match","an","ambiguous","group-by-item","pattern","from","the","root","nodes","(","representing","measures","\/","the","specs","available","for","those","measures",")","to","the","leaf","node","(","the","query","for","metrics","\/","valid","group-by","items","for","querying",")",".","For","nodes","with","multiple","parents",",","the","candidates","from","each","parent","are","intersected","and","passed","to","the","child","node","."]
docstr: Initializer.
  
  Args:
      manifest_lookup: The semantic manifest lookup associated with the resolution DAG that this will traverse.
      suggestion_generator: If there are issues with matching patterns to specs, use this to generate suggestions
      that will go in the issue.
      source_spec_patterns: The patterns to apply to the specs available at the measure nodes.
      with_any_property: Only consider group-by-items with these properties from the measure nodes.
      without_any_property:  Only consider group-by-items without any of these properties (see
      LinkableElementProperties).
code: def __init__(  # noqa: D
      self,
      manifest_lookup: SemanticManifestLookup,
      suggestion_generator: Optional[QueryItemSuggestionGenerator],
      source_spec_patterns: Sequence[SpecPattern] = (),
      with_any_property: Optional[
          Set[LinkableElementProperties]
      ] = None,
      without_any_property: Optional[
          Set[LinkableElementProperties]
      ] = None,
  ) -> None:
      """Initializer.
  
      Args:
          manifest_lookup: The semantic manifest lookup associated with the resolution DAG that this will traverse.
          suggestion_generator: If there are issues with matching patterns to specs, use this to generate suggestions
          that will go in the issue.
          source_spec_patterns: The patterns to apply to the specs available at the measure nodes.
          with_any_property: Only consider group-by-items with these properties from the measure nodes.
          without_any_property:  Only consider group-by-items without any of these properties (see
          LinkableElementProperties).
      """
      self._semantic_manifest_lookup = manifest_lookup
      self._source_spec_patterns = tuple(source_spec_patterns)
      self._path_from_start_node_tracker = DagTraversalPathTracker()
      self._with_any_property = with_any_property
      self._without_any_property = without_any_property
      self._suggestion_generator = suggestion_generator
  
imports: from __future__ import annotations
  import logging
  from contextlib import contextmanager
  from dataclasses import dataclass
  from typing import Dict, Iterator, List, Optional, Sequence, Set, Tuple
  from dbt_semantic_interfaces.enum_extension import assert_values_exhausted
  from dbt_semantic_interfaces.type_enums import MetricType
  from typing_extensions import override
  from metricflow.mf_logging.formatting import indent
  from metricflow.mf_logging.pretty_print import mf_pformat, mf_pformat_many
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.model.semantics.linkable_element_properties import LinkableElementProperties
  from metricflow.query.group_by_item.candidate_push_down.group_by_item_candidate import GroupByItemCandidateSet
  from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import GroupByItemResolutionNode, GroupByItemResolutionNodeVisitor
  from metricflow.query.group_by_item.resolution_dag.resolution_nodes.measure_source_node import MeasureGroupByItemSourceNode
  from metricflow.query.group_by_item.resolution_dag.resolution_nodes.metric_resolution_node import MetricGroupByItemResolutionNode
  from metricflow.query.group_by_item.resolution_dag.resolution_nodes.no_metrics_query_source_node import NoMetricsGroupByItemSourceNode
  from metricflow.query.group_by_item.resolution_dag.resolution_nodes.query_resolution_node import QueryGroupByItemResolutionNode
  from metricflow.query.group_by_item.resolution_path import MetricFlowQueryResolutionPath
  from metricflow.query.issues.group_by_item_resolver.invalid_use_of_date_part import MetricExcludesDatePartIssue
  from metricflow.query.issues.group_by_item_resolver.no_common_items import NoCommonItemsInParents
  from metricflow.query.issues.group_by_item_resolver.no_matching_items_for_measure import NoMatchingItemsForMeasure
  from metricflow.query.issues.group_by_item_resolver.no_matching_items_for_no_metrics_query import NoMatchingItemsForNoMetricsQuery
  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.none_date_part import NoneDatePartPattern
  from metricflow.specs.patterns.spec_pattern import SpecPattern
  from metricflow.specs.specs import InstanceSpecSet, LinkableInstanceSpec
label_desc: Use image node_id 1 to create a new _PushDownGroupByItemCandidatesVisitor object from inherited base classes: GroupByItemResolutionNodeVisitor with example: obj = _PushDownGroupByItemCandidatesVisitor(manifest_lookup, suggestion_generator, source_spec_patterns, with_any_property, without_any_property)