code: def update_anomalous_score(self):
          
          products = self._graph.retrieve_products(self)
          diffs = [
              p.summary.difference(self._graph.retrieve_review(self, p))
              for p in products
          ]
  
          old = self.anomalous_score
          try:
              self.anomalous_score = np.average(
                  diffs, weights=list(map(self._credibility, products)))
          except ZeroDivisionError:
              self.anomalous_score = np.average(diffs)
  
          return abs(self.anomalous_score - old)
docs: Update anomalous score.
  
          New anomalous score is a weighted average of differences
          between current summary and reviews. The weights come from credibilities.
  
          Therefore, the new anomalous score of reviewer :math:`p` is as
  
          .. math::
  
             {\\rm anomalous}(r) = \\frac{
               \\sum_{p \\in P} {\\rm credibility}(p)|
                  {\\rm review}(r, p)-{\\rm summary}(p)|
             }{
               \\sum_{p \\in P} {\\rm credibility}(p)
             }
  
          where :math:`P` is a set of products reviewed by reviewer :math:`p`,
          review(:math:`r`, :math:`p`) is the rating reviewer :math:`r` posted
          to product :math:`p`, summary(:math:`p`) and credibility(:math:`p`) are
          summary and credibility of product :math:`p`, respectively.
  
          Returns:
            absolute difference between old anomalous score and updated one.