'Actually back-propagate the gradient.'

def build_grad(self):

    assert (self.grad_op_tree is not None)
    if (type(self.op_tree) == OpTreeNode):
        (left_increment, right_increment) = GradUtil.get_grad_back(self)
        if (self.left.grad_op_tree is None):
            self.left.grad_op_tree = left_increment
        else:
            self.left.grad_op_tree = (self.left.grad_op_tree + left_increment)
        self.left.build_grad()
        if (right_increment is None):
            return
        if (self.right.grad_op_tree is None):
            self.right.grad_op_tree = right_increment
        else:
            self.right.grad_op_tree = (self.right.grad_op_tree + right_increment)
        self.right.build_grad()
    elif isinstance(self.op_tree, Tensor):
        self.ad.map_tensor_grad_op_tree[self.op_tree._original_base] = self.grad_op_tree
