class_docstr: Inference rule for checking if the column is the only time column in the table.
  
  It will always produce DIMENSION.PRIMARY_TIME signal with VERY_HIGH confidence.
class_docstr_tok: ["Inference","rule","for","checking","if","the","column","is","the","only","time","column","in","the","table",".","It","will","always","produce","DIMENSION.PRIMARY_TIME","signal","with","VERY_HIGH","confidence","."]
code: def process(
      self, warehouse: DataWarehouseInferenceContext
  ) -> List[InferenceSignal]:  # noqa: D
      signals: List[InferenceSignal] = []
      for table_props in warehouse.tables.values():
          time_cols = [
              col
              for col, col_props in table_props.columns.items()
              if col_props.type == InferenceColumnType.DATETIME
          ]
          if len(time_cols) == 1:
              signals.append(
                  InferenceSignal(
                      column=time_cols[0],
                      type_node=InferenceSignalType.DIMENSION.PRIMARY_TIME,
                      only_applies_to_parent=False,
                      reason="The column is the only time column in its table",
                      confidence=InferenceSignalConfidence.VERY_HIGH,
                  )
              )
      return signals
  
imports: from __future__ import annotations
  from typing import List
  from metricflow.inference.context.data_warehouse import ColumnProperties, DataWarehouseInferenceContext, InferenceColumnType
  from metricflow.inference.models import InferenceSignal, InferenceSignalConfidence, InferenceSignalType
  from metricflow.inference.rule.base import InferenceRule
  from metricflow.inference.rule.rules import ColumnMatcherRule, LowCardinalityRatioRule
label_desc: Use image node_id 1 for calling the PrimaryTimeDimensionIfOnlyTimeRule obj's underlying member method code with example usage: obj.process(warehouse) and returns: signals