class_docstr: Inference rule that checks for matches across all columns.
  
  This is a useful shortcut for making rules that match columns one by one with preset confidence
  values, types and match reasons.
  
  If you need a more specific rule with varying confidence, column cross-checking and that outputs
  multiple types, inherit from `InferenceRule` directly.
  
  type_node: the `InferenceSignalNode` to produce whenever the pattern is matched
  confidence: the `InferenceSignalConfidence` to produce whenever the pattern is matched
  only_applies_to_parent_signal: whether the produced signal should be only taken into
      consideration by the solver if the parent is present in the tree.
  match_reason: a human-readable string of the reason why this was matched
docstr: Try to match all columns' properties with the matching function.
  
  If they do match, produce a signal with the configured type and confidence.
docstr_tok: ["Try","to","match","all","columns","'","properties","with","the","matching","function",".","If","they","do","match",",","produce","a","signal","with","the","configured","type","and","confidence","."]
code: def process(self, warehouse: DataWarehouseInferenceContext) -> List[InferenceSignal]:  # type: ignore
      """Try to match all columns' properties with the matching function.
  
      If they do match, produce a signal with the configured type and confidence.
      """
      matching_columns = [
          column
          for column, props in warehouse.columns.items()
          if self.match_column(props)
      ]
      signals = [
          InferenceSignal(
              column=column,
              type_node=self.type_node,
              reason=self.match_reason,
              confidence=self.confidence,
              only_applies_to_parent=self.only_applies_to_parent_signal,
          )
          for column in matching_columns
      ]
      return signals
  
file_path: metricflow/metricflow/inference/rule/rules.py
imports: from __future__ import annotations
  from abc import abstractmethod
  from typing import Callable, List, TypeVar
  from metricflow.inference.context.data_warehouse import ColumnProperties, DataWarehouseInferenceContext
  from metricflow.inference.models import InferenceSignal, InferenceSignalConfidence, InferenceSignalNode
  from metricflow.inference.rule.base import InferenceRule
label_desc: Use image node_id 2 for calling the ColumnMatcherRule obj's underlying member method code with example usage: obj.process(warehouse) and returns: signals