def set(self, **kwargs):
        '''
        cplan.set(a=b...) yields a new caclulation plan identical to cplan except such that the
        calculation pieces specified by the arguments have been replaced with the given
        calculations instead.
        '''
        return Plan(reduce(lambda m,u: m.set(u[0],u[1]), six.iteritems(kwargs), self.nodes))