コード例 #1
0
ファイル: test_paths.py プロジェクト: scape1989/ieml
    def test_resolve(self):
        word = topic([ieml('wa.')])
        p = path('r0')
        elems = resolve(word, p)
        self.assertSetEqual(elems, {ieml('wa.')})

        worda = topic([ieml('wu.')])
        wordm = topic([ieml('we.')])

        s = fact([(word, worda, wordm)])
        p = path('sa:r')
        elems = resolve(s, p)
        self.assertSetEqual(elems, {ieml('wu.')})

        p = path('sa0+s0+sm0')
        elems = resolve(s, p)
        self.assertSetEqual(elems, {word, wordm, worda})

        t = text([s, word])
        p = path('t')
        elems = resolve(t, p)
        self.assertSetEqual(elems, {s, word})
        p = path('t1')
        elems = resolve(t, p)
        self.assertSetEqual(elems, {s})
コード例 #2
0
ファイル: test_paths.py プロジェクト: scape1989/ieml
    def test_random(self):
        r = RandomPoolIEMLObjectGenerator(level=Fact)
        s = r.fact()
        p = path("s+a+m + (s+a+m):(r+f)")
        elems = resolve(s, p)
        self.assertSetEqual(elems, s.topics.union(s.words))

        p = path("t + t:(s+a+m+r+f+(s+a+m):(s+a+m+r+f+(s+a+m):(r+f)))")
        usl = random_usl(rank_type=Text)
        elems = resolve(usl, p)
        self.assertSetEqual(
            usl.facts.union(usl.topics).union(usl.words).union(usl.theories),
            elems)
コード例 #3
0
    def __getitem__(self, item):
        from ieml.grammar.paths import Path, path, resolve

        if isinstance(item, str):
            item = path(item)

        if isinstance(item, Path):
            res = resolve(self, item)
            if len(res) == 1:
                return res.__iter__().__next__()
            else:
                return tuple(sorted(res))

        from .word import Word
        if item == Word:
            return self.words

        from .topic import Topic
        if item == Topic:
            return self.topics

        from .fact import Fact
        if item == Fact:
            return self.facts

        from .theory import Theory
        if item == Theory:
            return self.theories

        from .text import Text
        if item == Text:
            return {self} if self.__class__ == Text else {}
コード例 #4
0
ファイル: usl.py プロジェクト: IEMLdev/ieml-api
    def __getitem__(self, item):
        from ieml.grammar.paths import Path, path, resolve

        if isinstance(item, str):
            item = path(item)

        if isinstance(item, Path):
            res = resolve(self, item)
            if len(res) == 1:
                return res.__iter__().__next__()
            else:
                return tuple(sorted(res))

        from .word import Word
        if item == Word:
            return self.words

        from .topic import Topic
        if item == Topic:
            return self.topics

        from .fact import Fact
        if item == Fact:
            return self.facts

        from .theory import Theory
        if item == Theory:
            return self.theories

        from .text import Text
        if item == Text:
            return {self} if self.__class__ == Text else {}
コード例 #5
0
def usl(arg):
    if isinstance(arg, str):
        from .parser import IEMLParser
        return IEMLParser().parse(arg)

    if isinstance(arg, Term):
        from .word import Word
        return Word(arg)

    if isinstance(arg, Usl):
        return arg

    from ieml.grammar.paths import resolve_ieml_object, path
    if isinstance(arg, dict):
        # map path -> Ieml_object
        return resolve_ieml_object(arg)

    # if iterable, can be a list of usl to convert into a text
    try:
        usl_list = list(arg)
    except TypeError:
        pass
    else:
        if len(usl_list) == 0:
            return usl('E:')

        if all(isinstance(u, Usl) for u in usl_list):
            if len(usl_list) == 1:
                return usl_list[0]
            else:
                from ieml.grammar import text
                return text(usl_list)
        else:
            # list of path objects
            try:
                rules = [(a, b) for a, b in usl_list]
            except TypeError:
                pass
            else:
                rules = [(path(a), usl(b)) for a, b in rules]
                return resolve_ieml_object(rules)

    raise NotImplementedError()
コード例 #6
0
ファイル: usl.py プロジェクト: IEMLdev/ieml-api
def usl(arg):
    if isinstance(arg, str):
        from .parser import IEMLParser
        return IEMLParser().parse(arg)

    if isinstance(arg, Term):
        from .word import Word
        return Word(arg)

    if isinstance(arg, Usl):
        return arg

    from ieml.grammar.paths import resolve_ieml_object, path
    if isinstance(arg, dict):
        # map path -> Ieml_object
        return resolve_ieml_object(arg)

    # if iterable, can be a list of usl to convert into a text
    try:
        usl_list = list(arg)
    except TypeError:
        pass
    else:
        if len(usl_list) == 0:
            return usl('E:')

        if all(isinstance(u, Usl) for u in usl_list):
            if len(usl_list) == 1:
                return usl_list[0]
            else:
                from ieml.grammar import text
                return text(usl_list)
        else:
            # list of path objects
            try:
                rules = [(a, b) for a, b in usl_list]
            except TypeError:
                pass
            else:
                rules = [(path(a), usl(b)) for a, b in rules]
                return resolve_ieml_object(rules)

    raise NotImplementedError()
コード例 #7
0
ファイル: test_paths.py プロジェクト: scape1989/ieml
    def test_rules(self):
        rules0 = [(path('r0'), ieml('wa.'))]
        obj = resolve_ieml_object(*zip(*rules0))
        self.assertEqual(obj, topic([ieml('wa.')]))

        rules1 = [(path('r1'), ieml('wa.')), (path('r'), ieml('I:')),
                  (path('f0'), ieml('we.'))]
        obj = resolve_ieml_object(*zip(*rules1))
        word1 = topic([ieml('I:'), ieml('wa.')], [ieml('we.')])
        self.assertEqual(obj, word1)

        self.assertEqual(resolve_ieml_object(enumerate_paths(obj)), obj)

        r = RandomPoolIEMLObjectGenerator(level=Text)
        t = r.text()
        self.assertEqual(t, resolve_ieml_object(enumerate_paths(t)))

        rules = [(path('r1'), ieml('wa.')), (path('r'), ieml('I:')),
                 (path('f0'), ieml('we.'))]
        obj = resolve_ieml_object(*zip(*rules))
        self.assertEqual(obj, topic([ieml('I:'), ieml('wa.')], [ieml('we.')]))
コード例 #8
0
ファイル: test_paths.py プロジェクト: scape1989/ieml
    def test_path_parser(self):
        p = path("t:sa:sa0:f")
        self.assertIsInstance(p, ContextPath)
        self.assertListEqual(
            [c.__class__ for c in p.children],
            [Coordinate, MultiplicativePath, MultiplicativePath, Coordinate])
        self.assertEqual(str(p), "t:sa:sa0:f")
        self.assertTupleEqual(tuple(p.context), ({Text}, False, {
            Text: {Word}
        }))

        p = path('f15684')
        self.assertIsInstance(p, Coordinate)
        self.assertEqual(p.kind, 'f')
        self.assertEqual(p.index, 15684)
        self.assertTupleEqual(tuple(p.context), ({Topic}, False, {
            Topic: {Word}
        }))

        p = path("t0:(s0a0 + s0m0):s:f + t1:s:s:(r+f)")
        self.assertIsInstance(p, AdditivePath)

        p = path("t:(s+s)a")
        self.assertIsInstance(p, ContextPath)

        with self.assertRaises(PathError):
            p = path("(s:r+s):r")
            print(p)

        p = path("t + s + s:s + r")
        self.assertTupleEqual(p.context, ({Text, Theory, Fact, Topic}, True, {
            Text: {Theory, Fact, Topic, Word},
            Theory: {Fact, Topic},
            Fact: {Topic},
            Topic: {Word}
        }))
コード例 #9
0
ファイル: test_paths.py プロジェクト: scape1989/ieml
 def test_context(self):
     with self.assertRaises(PathError):
         p = path("sma")