code: def update(self, x, w=1):
          
          self.n += w
  
          if len(self) == 0:
              self._add_centroid(Centroid(x, w))
              return
  
          S = self._find_closest_centroids(x)
  
          while len(S) != 0 and w > 0:
              j = choice(list(range(len(S))))
              c_j = S[j]
  
              q = self._compute_centroid_quantile(c_j)
  
              # This filters the out centroids that do not satisfy the second part
              # of the definition of S. See original paper by Dunning.
              if c_j.count + w > self._threshold(q):
                  S.pop(j)
                  continue
  
              delta_w = min(self._threshold(q) - c_j.count, w)
              self._update_centroid(c_j, x, delta_w)
              w -= delta_w
              S.pop(j)
  
          if w > 0:
              self._add_centroid(Centroid(x, w))
  
          if len(self) > self.K / self.delta:
              self.compress()
  
          return
docs: Update the t-digest with value x and weight w.