'Return a list of nodes on the update front, i.e. nodes scheduled for
an update that have no ancestor which is either itself scheduled
for update or is in a blocking state)
.. note::
The node\'s ancestors are only computed over enabled links.'

def node_update_front(self):

    scheme = self.scheme()
    blocking_nodes = set(self.blocking_nodes())
    dependents = partial(dependent_nodes, scheme)
    blocked_nodes = reduce(set.union, map(dependents, blocking_nodes), set(blocking_nodes))
    pending = self.pending_nodes()
    pending_downstream = reduce(set.union, map(dependents, pending), set())
    log.debug('Pending    nodes:    %s', pending)
    log.debug('Blocking    nodes:    %s', blocking_nodes)
    noneligible = (pending_downstream | blocked_nodes)
    return [node for node in pending if (node not in noneligible)]
