class_docstr: Expand traffic light boundaries over all features and metrics
  
  The module extracts the monitoring rules for the traffic light
  bounds for specific features/metrics and if those are not found -
  monitoring rules are extracted from the wildcard rules which are
  meant to be generic. Then bounds can be stored as either raw
  values or as directly calculated values on the statistics of the data.
code: def _set_traffic_lights(self, feature, cols, pattern, rule) -> None:
      process_cols = fnmatch.filter(cols, pattern)
  
      for pcol in process_cols:
          name = f"{feature}:{pcol}"
          if name not in self.traffic_lights:
              key = rule(name, feature, pattern)
              bounds = self.monitoring_rules[key]
              self.traffic_lights[name] = bounds
              metrics = (
                  [pcol]
                  if not self.metrics_wide
                  else [
                      c
                      for c in cols
                      if c.startswith(pcol.split("_")[0])
                  ]
              )
              self.traffic_light_funcs.append(
                  {
                      "func": self.traffic_light_func,
                      "features": [feature],
                      "metrics": metrics,
                      "args": tuple(bounds),
                      "prefix": self.prefix,
                      "suffix": self.suffix,
                      "entire": self.entire,
                      "kwargs": self.kwargs,
                  }
              )
  
imports: from __future__ import annotations
  import copy
  import fnmatch
  from collections import defaultdict
  from typing import Any
  import numpy
  import pandas
  from popmon.analysis.apply_func import ApplyFunc
  from popmon.base import Module, Pipeline
label_desc: Use image node_id 3 for calling the ComputeTLBounds obj's underlying member method code with example usage: obj._set_traffic_lights(feature, cols, pattern, rule) without return types