Delete a command from the watched list.  This involves removing
        the command from the inverted watch list, then possibly
        rebuilding the event set if any modules no longer need watching.

def remove(self, name, **params):
        """
        Delete a command from the watched list.  This involves removing
        the command from the inverted watch list, then possibly
        rebuilding the event set if any modules no longer need watching.
    """
        log = self._getparam('log', self._discard, **params)

        if name not in self.names:
            log.error("Attempt to remove %r which was never added", name)
            raise Exception("Command %r has never been added" % (name,))
        del self.names[name]
        rebuild = False
        for path in list(self.modules):
            if name in self.modules[path]:
                self.modules[path].remove(name)
            if len(self.modules[path]) == 0:
                del self.modules[path]
                rebuild = True
        if rebuild:
            self._build(name, **params)