class_docstr: Base class for the decision rules based on the Hoeffding bound.
  
  It defines properties and operations shared by all the rule-based systems, for instance, how
  to perform rule expansion, how to monitor inputs, and whether or not a rule is currently
  covering an input datum.
  
  Parameters
  ----------
  template_splitter
      The attribute observer algorithm used to monitor and perform split attempts in numerical
      features. This splitter is be deep-copied to all the decision rules. The same attribute
      observer algorithms used by the Hoeffding Trees can be used with Hoeffding rules.
  split_criterion
      The criterion used to rank the split candidates. The same split criteria used by the
      Hoeffding Trees can be applied to the Hoeffding rules.
  attributes
      Other parameters passed to the rules via `**kwargs`.
code: def _update_feature_stats(self, feat_name, feat_val, w):
      # By default, no feature stats are kept
      pass
  
imports: from __future__ import annotations
  import abc
  import copy
  import math
  import numbers
  import typing
  from river import base, tree
label_desc: Use image node_id 12 for calling the HoeffdingRule obj's underlying member method code with example usage: obj._update_feature_stats(feat_name, feat_val, w) without return types