# Path: pyknow/watchers.py
# def define_watcher(name):
# def worth(what, level_name):
# def watch(*what, level=logging.DEBUG):
# def unwatch(*what):
# RULES = define_watcher('RULES')
# ACTIVATIONS = define_watcher('ACTIVATIONS')
# FACTS = define_watcher('FACTS')
# AGENDA = define_watcher('AGENDA')
# MATCH = define_watcher('MATCH')
# MATCHER = define_watcher('MATCHER')
# ENGINE = define_watcher('ENGINE')
# ALL = tuple(k for k in globals() if k.isupper() and k != 'ALL')


import abc
from pyknow import watchers
        """Reset this node's memory."""
        pass

    def __str__(self):  # pragma: no cover
        return self.__class__.__name__


class OneInputNode(Node):
    """Nodes which only have one input port."""

    def activate(self, token):
        """Make a copy of the received token and call `self._activate`."""

        if watchers.worth('MATCHER', 'DEBUG'):  # pragma: no cover
            watchers.MATCHER.debug(
                "Node <%s> activated with token %r", self, token)

        return self._activate(token.copy())

    @abc.abstractproperty
    def _activate(self, token):  # pragma: no cover
        """Node activation routine."""
        pass


class TwoInputNode(Node):
    """Nodes which have two input ports: left and right."""

    def activate_left(self, token):
        """Make a copy of the received token and call `_activate_left`."""

# Path: pyknow/watchers.py
# def define_watcher(name):
# def worth(what, level_name):
# def watch(*what, level=logging.DEBUG):
# def unwatch(*what):
# RULES = define_watcher('RULES')
# ACTIVATIONS = define_watcher('ACTIVATIONS')
# FACTS = define_watcher('FACTS')
# AGENDA = define_watcher('AGENDA')
# MATCH = define_watcher('MATCH')
# MATCHER = define_watcher('MATCHER')
# ENGINE = define_watcher('ENGINE')
# ALL = tuple(k for k in globals() if k.isupper() and k != 'ALL')


# Path: pyknow/matchers/rete/abstract.py
import abc
from pyknow import watchers

        """Reset this node's memory."""
        pass

    def __str__(self):  # pragma: no cover
        return self.__class__.__name__


class OneInputNode(Node):
    """Nodes which only have one input port."""

    def activate(self, token):
        """Make a copy of the received token and call `self._activate`."""

        if watchers.worth('MATCHER', 'DEBUG'):  # pragma: no cover
            watchers.MATCHER.debug(
                "Node <%s> activated with token %r", self, token)

        return self._activate(token.copy())

    @abc.abstractproperty
    def _activate(self, token):  # pragma: no cover
        """Node activation routine."""
        pass


class TwoInputNode(Node):
    """Nodes which have two input ports: left and right."""

    def activate_left(self, token):
        """Make a copy of the received token and call `_activate_left`."""

        watchers.MATCHER.debug(