class_docstr: Numeric attribute observer for classification tasks that is based on
  a Binary Search Tree.
  
  This algorithm[^1] is also referred to as exhaustive attribute observer,
  since it ends up storing all the observations between split attempts[^2].
  
  This splitter cannot perform probability density estimations, so it does not work well
  when coupled with tree leaves using naive bayes models.
  
  References
  ----------
  [^1]: Domingos, P. and Hulten, G., 2000, August. Mining high-speed data streams.
  In Proceedings of the sixth ACM SIGKDD international conference on Knowledge discovery
  and data mining (pp. 71-80).
  [^2]: Pfahringer, B., Holmes, G. and Kirkby, R., 2008, May. Handling numeric attributes in
  hoeffding trees. In Pacific-Asia Conference on Knowledge Discovery and Data Mining
  (pp. 296-307). Springer, Berlin, Heidelberg.
class_docstr_tok: ["Numeric","attribute","observer","for","classification","tasks","that","is","based","on","a","Binary","Search","Tree",".","This","algorithm","[","^1","]","is","also","referred","to","as","exhaustive","attribute","observer",",","since","it","ends","up","storing","all","the","observations","between","split","attempts","[","^2","]",".","This","splitter","can","not","perform","probability","density","estimations",",","so","it","does","not","work","well","when","coupled","with","tree","leaves","using","naive","bayes","models",".","References","--","--","--","--","--","[","^1","]",":","Domingos",",","P.","and","Hulten",",","G.",",","2000",",","August",".","Mining","high-speed","data","streams",".","In","Proceedings","of","the","sixth","ACM","SIGKDD","international","conference","on","Knowledge","discovery","and","data","mining","(","pp",".","71-80",")",".","[","^2","]",":","Pfahringer",",","B.",",","Holmes",",","G.","and","Kirkby",",","R.",",","2008",",","May",".","Handling","numeric","attributes","in","hoeffding","trees",".","In","Pacific-Asia","Conference","on","Knowledge","Discovery","and","Data","Mining","(","pp",".","296-307",")",".","Springer",",","Berlin",",","Heidelberg","."]
code: def best_evaluated_split_suggestion(
      self, criterion, pre_split_dist, att_idx, binary_only
  ):
      current_best_option = BranchFactory()
  
      return self._search_for_best_split_option(
          current_node=self._root,
          current_best_option=current_best_option,
          actual_parent_left=None,
          parent_left=None,
          parent_right=None,
          left_child=False,
          criterion=criterion,
          pre_split_dist=pre_split_dist,
          att_idx=att_idx,
      )
  
file_path: river/river/tree/splitter/exhaustive_splitter.py
imports: from __future__ import annotations
  from collections import Counter, defaultdict
  from ..utils import BranchFactory
  from .base import Splitter
label_desc: Use image node_id 4 for calling the ExhaustiveSplitter obj's underlying member method code with example usage: obj.best_evaluated_split_suggestion(criterion, pre_split_dist, att_idx, binary_only) and returns: self