def update_predictive_posteriors(self, param, data, settings):
        """
        update predictive posterior for hierarchical normalized stable distribution
        pred_prob computes posterior mean of the label distribution at each node recursively
        """
        node_list = [self.root]
        if settings.debug:
            self.gen_node_ids_print()
        while True:
            try:
                node_id = node_list.pop(0)
            except __HOLE__:
                break
            base = self.get_prior_mean(node_id, param, settings)
            discount = self.get_discount_node_id(node_id, settings)
            cnt = self.cnt[node_id]
            if not node_id.is_leaf:
                self.pred_prob[node_id] = self.compute_posterior_mean_normalized_stable(cnt, discount, base, settings)
                node_list.extend([node_id.left, node_id.right])
            if settings.debug and False:
                print 'node_id = %20s, is_leaf = %5s, discount = %.2f, cnt = %s, base = %s, pred_prob = %s' \
                        % (self.node_ids_print[node_id], node_id.is_leaf, discount, cnt, base, self.pred_prob[node_id])
dataset/ETHPy150Open balajiln/mondrianforest/src/mondrianforest.py/MondrianTree.update_predictive_posteriors