class_docstr: Adjusted Mutual Information between two clusterings.
  
  Adjusted Mutual Information (AMI) is an adjustment of the Mutual Information score
  that accounts for chance. It corrects the effect of agreement solely due to chance
  between clusterings, similar to the way the Adjusted Rand Index corrects the Rand Index.
  It is closely related to variation of information. The adjusted measure, however, is
  no longer metrical.
  
  For two clusterings $U$ and $V$, the Adjusted Mutual Information is calculated as:
  
  $$
  AMI(U, V) = \frac{MI(U, V) - E(MI(U, V))}{avg(H(U), H(V)) - E(MI(U, V))}
  $$
  
  This metric is independent of the permutation of the class or cluster label values;
  furthermore, it is also symmetric. This can be useful to measure the agreement of
  two label assignments strategies on the same dataset, regardless of the ground truth.
  
  However, due to the complexity of the Expected Mutual Info Score, the computation of
  this metric is an order of magnitude slower than most other metrics, in general.
  
  Parameters
  ----------
  cm
      This parameter allows sharing the same confusion
      matrix between multiple metrics. Sharing a confusion matrix reduces the amount of storage
      and computation time.
  
  average_method
      This parameter defines how to compute the normalizer in the denominator.
      Possible options include `min`, `max`, `arithmetic` and `geometric`.
  
  Examples
  --------
  
  >>> from river import metrics
  
  >>> y_true = [1, 1, 2, 2, 3, 3]
  >>> y_pred = [1, 1, 1, 2, 2, 2]
  
  >>> metric = metrics.AdjustedMutualInfo()
  >>> for yt, yp in zip(y_true, y_pred):
  ...     metric.update(yt, yp)
  ...     print(metric.get())
  1.0
  1.0
  0.0
  0.0
  0.105891
  0.298792
  
  >>> metric
  AdjustedMutualInfo: 0.298792
  
  References
  ----------
  [^1]: Wikipedia contributors. (2021, March 17). Mutual information.
        In Wikipedia, The Free Encyclopedia,
        from https://en.wikipedia.org/w/index.php?title=Mutual_information&oldid=1012714929
code: def works_with_weights(self):
      return False
  
imports: from __future__ import annotations
  import math
  import numpy
  from river import metrics
  from river.metrics.expected_mutual_info import expected_mutual_info
label_desc: Use image node_id 2 for calling the AdjustedMutualInfo obj's underlying member method code with example usage: obj.works_with_weights() and returns: False