Esempio n. 1
0
        def _capturations():
            for key, value in self.value.items():
                if value.__class__.__name__ == "C":
                    value.key = key
                    capture_valueset.value.add((key, value))

            for idx, fact in factlist.facts.items():
                captured_context = capture_valueset.matches(fact)
                if captured_context:
                    yield Capturation(**{str(idx): captured_context})
Esempio n. 2
0
def test_Rule_with_only_one_NOT_match_InitialFact_if_fact_is_not_present():
    from pyknow.rule import NOT, Rule
    from pyknow.factlist import FactList
    from pyknow.fact import Fact, InitialFact, L
    from pyknow.match import Capturation

    r = Rule(NOT(Fact(something=L(True))))
    fl = FactList()
    fl.declare(InitialFact())

    assert next(r.get_activations(fl, Capturation()), None) is not None
Esempio n. 3
0
def test_capturations_add():
    """ Test __add__ method of capturations """
    from pyknow.match import Capturation, Context
    cap1 = Capturation({
        "1": Context({"1": "foo"}),
        "2": Context({"1": "bar"})
    })
    cap2 = Capturation({
        "1": Context({"2": "foo"}),
        "3": Context({"1": "foo"})
    })
    result = cap1 + cap2
    assert result == Capturation({
        "1": Context({
            "1": "foo",
            "2": "foo"
        }),
        "2": Context({"1": "bar"}),
        "3": Context({"1": "foo"})
    })
Esempio n. 4
0
def test_facts_produce_activations_without_capturation():
    """
    A fact produces activations if no capturations are provided
    """
    from pyknow.fact import Fact, L
    from pyknow.factlist import FactList
    from pyknow.match import Capturation

    flist = FactList()
    flist.declare(Fact(a=L(1)))
    caps = list(Fact(a=L(1)).get_activations(flist, Capturation()))
    assert len(caps) == 1
Esempio n. 5
0
def test_Rule_empty_matches_with_initial_fact():
    from pyknow.rule import Rule
    from pyknow.factlist import FactList
    from pyknow.fact import InitialFact
    from pyknow.activation import Activation
    from pyknow.match import Capturation

    r = Rule()
    fl = FactList()
    fl.declare(InitialFact())
    assert Activation(None,
                      (0, )) in list(r.get_activations(fl, Capturation()))
Esempio n. 6
0
def test_facts_produce_activations_that_are_Activations():
    """
    A fact produces activations that are Activation objects
    """
    from pyknow.fact import Fact, L
    from pyknow.factlist import FactList
    from pyknow.match import Capturation
    from pyknow.activation import Activation

    flist = FactList()
    flist.declare(Fact(a=L(1)))
    caps = list(Fact(a=L(1)).get_activations(flist, Capturation()))
    assert len(caps) == 1
    assert isinstance(caps[0], Activation)
    assert caps[0].facts == (0,)
Esempio n. 7
0
    def get_capturations(self, factlist):
        """
        Returns ``Capturation`` objects, relating facts with its matching
        context
        """

        FACT_WATCHER.debug("Getting capturations")

        capture_valueset = ValueSet(self, 'C')

        def _capturations():
            for key, value in self.value.items():
                if value.__class__.__name__ == "C":
                    value.key = key
                    capture_valueset.value.add((key, value))

            for idx, fact in factlist.facts.items():
                captured_context = capture_valueset.matches(fact)
                if captured_context:
                    yield Capturation(**{str(idx): captured_context})

        return sum(_capturations(), Capturation())
Esempio n. 8
0
    def get_activations(self, factlist, capturations=Capturation()):
        """
        For this :obj:`pyknow.rule.Rule`, returns all the
        :obj:`pyknow.activation.Activation`, for the provided factlist.

        :param factlist: :obj:`pyknow.factlist.FactList` to match against.
        :return: Tuple of unique :obj:`pyknow.activation.Activation` matches.
        """

        if not isinstance(factlist, FactList):
            raise ValueError("Factlist must be a factlist instance")

        def _all_activations():
            """
            Tengo un problema aqui al sacar las activaciones.
            El InitialFact tambien matchea y entra dentro del product(),
            entonces acabo con una activación con el initialfact y otra
            sin el en el caso de los or
            """
            for cond in self._conds:
                yield (a for a in cond.get_activations(factlist, capturations))

        return (sum_objs(iter(a)) for a in product(*_all_activations()))
Esempio n. 9
0
 def get_capturations(self, factlist):
     """
     Return captured values with its facts from all our children
     """
     return sum((cond.get_capturations(factlist) for cond in self._conds),
                Capturation())