# 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
        working memory and return a set of activations.

        """
        pass

    @abc.abstractmethod
    def reset(self):  # pragma: no cover
        """Reset the matcher memory."""
        pass


class Strategy(metaclass=abc.ABCMeta):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resolved = dict()

    @abc.abstractmethod
    def _update_agenda(self, agenda, added, removed):  # pragma: no cover
        pass

    def update_agenda(self, agenda, added, removed):
        if watchers.worth('ACTIVATIONS', 'INFO'):  # pragma: no cover
            for act in removed:
                watchers.ACTIVATIONS.info(
                    " <== %r: %s %s",
                    getattr(act.rule, '__name__', None),
                    ", ".join(str(f) for f in act.facts),
                    "[EXECUTED]" if act not in agenda.activations else "")

            for act in added:

# 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/abstract.py
import abc
from pyknow import watchers

        working memory and return a set of activations.

        """
        pass

    @abc.abstractmethod
    def reset(self):  # pragma: no cover
        """Reset the matcher memory."""
        pass


class Strategy(metaclass=abc.ABCMeta):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resolved = dict()

    @abc.abstractmethod
    def _update_agenda(self, agenda, added, removed):  # pragma: no cover
        pass

    def update_agenda(self, agenda, added, removed):
        if watchers.worth('ACTIVATIONS', 'INFO'):  # pragma: no cover
            for act in removed:
                watchers.ACTIVATIONS.info(
                    " <== %r: %s %s",
                    getattr(act.rule, '__name__', None),
                    ", ".join(str(f) for f in act.facts),
                    "[EXECUTED]" if act not in agenda.activations else "")

            for act in added:

                watchers.ACTIVATIONS.info(