docs: def update(self):
          """ Update reviewers' anomalous scores and products' summaries.
  
          The update consists of 2 steps;
  
          Step1 (updating summaries):
              Update summaries of products with anomalous scores of reviewers
              and weight function. The weight is calculated by the manner in
              :class:`ria.bipartite.BipartiteGraph`.
  
          Step2 (updating anomalous scores):
              Update its anomalous score of each reviewer by computing the summation
              of deviation times credibility.
              See :meth:`Reviewer.update_anomalous_score` for more details.
              After that those updated anomalous scores are normalized so that
              every value is in :math:`[0, 1]`.
  
          Returns:
            maximum absolute difference between old summary and new one, and
              old anomalous score and new one. This value is not normalized and
              thus it may be grater than actual normalized difference.
          """
          res = super(BipartiteGraph, self).update()
  
          max_v = None
          min_v = float("inf")
          for r in self.reviewers:
              max_v = max(max_v, r.anomalous_score)
              min_v = min(min_v, r.anomalous_score)
  
          width = max_v - min_v
          if width:
              for r in self.reviewers:
                  r.anomalous_score = (r.anomalous_score - min_v) / width
  
          return res