class_docstr: Multi-label confusion matrix.
  
  Under the hood, this stores one `metrics.ConfusionMatrix` for each output.
  
  Examples
  --------
  
  >>> from river import metrics
  
  >>> cm = metrics.multioutput.MultiLabelConfusionMatrix()
  
  >>> y_true = [
  ...     {0: False, 1: True, 2: True},
  ...     {0: True, 1: True, 2: False}
  ... ]
  
  >>> y_pred = [
  ...     {0: True, 1: True, 2: True},
  ...     {0: True, 1: False, 2: False}
  ... ]
  
  >>> for yt, yp in zip(y_true, y_pred):
  ...     cm.update(yt, yp)
  
  >>> cm
  0
              False   True
      False       0      1
       True       0      1
  <BLANKLINE>
  1
              False   True
      False       0      0
       True       1      1
  <BLANKLINE>
  2
              False   True
      False       1      0
       True       0      1
code: def update(self, y_true, y_pred, w=1.0):
      for label, yt in y_true.items():
          try:
              cm = self.data[label]
          except KeyError:
              cm = metrics.ConfusionMatrix()
              self.data[label] = cm
          cm.update(yt, y_pred[label], w)
  
file_path: river/river/metrics/multioutput/confusion.py
imports: from __future__ import annotations
  import textwrap
  from river import metrics
label_desc: Use image node_id 2 for calling the MultiLabelConfusionMatrix obj's underlying member method code with example usage: obj.update(y_true, y_pred, w) without return types