class_docstr: Visitor that resolves specs for all filters in a resolution DAG and builds a lookup.
  
  This visitor traverses the group-by-item resolution DAG and if there is a where filter associated with the node,
  this resolves (ambiguous) group-by-items that are specified in the filter. All resolutions are
  collected and returned in a lookup object.
class_docstr_tok: ["Visitor","that","resolves","specs","for","all","filters","in","a","resolution","DAG","and","builds","a","lookup",".","This","visitor","traverses","the","group-by-item","resolution","DAG","and","if","there","is","a","where","filter","associated","with","the","node",",","this","resolves","(","ambiguous",")","group-by-items","that","are","specified","in","the","filter",".","All","resolutions","are","collected","and","returned","in","a","lookup","object","."]
code: def _dedupe_filter_call_parameter_sets(
      filter_call_parameter_sets_sequence: Sequence[
          FilterCallParameterSets
      ],
  ) -> FilterCallParameterSets:
      # FilterCallParameterSets needs an update.
      return FilterCallParameterSets(
          dimension_call_parameter_sets=tuple(
              dict.fromkeys(
                  itertools.chain.from_iterable(
                      filter_call_parameter_sets.dimension_call_parameter_sets
                      for filter_call_parameter_sets in filter_call_parameter_sets_sequence
                  )
              )
          ),
          time_dimension_call_parameter_sets=tuple(
              dict.fromkeys(
                  itertools.chain.from_iterable(
                      filter_call_parameter_sets.time_dimension_call_parameter_sets
                      for filter_call_parameter_sets in filter_call_parameter_sets_sequence
                  )
              )
          ),
          entity_call_parameter_sets=tuple(
              dict.fromkeys(
                  itertools.chain.from_iterable(
                      filter_call_parameter_sets.entity_call_parameter_sets
                      for filter_call_parameter_sets in filter_call_parameter_sets_sequence
                  )
              )
          ),
      )
  
imports: from __future__ import annotations
  import itertools
  import logging
  from typing import List, Sequence
  from dbt_semantic_interfaces.call_parameter_sets import FilterCallParameterSets
  from dbt_semantic_interfaces.implementations.filters.where_filter import PydanticWhereFilterIntersection
  from dbt_semantic_interfaces.protocols import WhereFilter, WhereFilterIntersection
  from typing_extensions import override
  from metricflow.mf_logging.runtime import log_runtime
  from metricflow.model.semantic_manifest_lookup import SemanticManifestLookup
  from metricflow.naming.object_builder_str import ObjectBuilderNameConverter
  from metricflow.query.group_by_item.candidate_push_down.push_down_visitor import DagTraversalPathTracker
  from metricflow.query.group_by_item.filter_spec_resolution.filter_location import WhereFilterLocation
  from metricflow.query.group_by_item.filter_spec_resolution.filter_pattern_factory import WhereFilterPatternFactory
  from metricflow.query.group_by_item.filter_spec_resolution.filter_spec_lookup import FilterSpecResolution, FilterSpecResolutionLookUp, NonParsableFilterResolution, PatternAssociationForWhereFilterGroupByItem, ResolvedSpecLookUpKey
  from metricflow.query.group_by_item.group_by_item_resolver import GroupByItemResolver
  from metricflow.query.group_by_item.resolution_dag.dag import GroupByItemResolutionDag, ResolutionDagSinkNode
  from metricflow.query.group_by_item.resolution_dag.resolution_nodes.base_node import 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.filter_spec_resolver.invalid_where import WhereFilterParsingIssue
  from metricflow.query.issues.issues_base import MetricFlowQueryResolutionIssueSet
label_desc: Use image node_id 2 for calling the _ResolveWhereFilterSpecVisitor obj's underlying member method code with example usage: obj._dedupe_filter_call_parameter_sets(filter_call_parameter_sets_sequence) and returns: FilterCallParameterSets