def test_constructor(self):
        d = {("a", "b", "c"): 2, ("a", "f"): 1}
        tl = TraceLog(d)

        for k, v in d.items():
            assert k in tl
            assert tl[k] == v

        for k, v in tl.items():
            assert k in d
            assert d[k] == v
    def test_follows_loop_len_1(self):
        d = {("a", "b", "c"): 2, ("a", "a", "f"): 1}
        s = {("a", "b"): 2, ("b", "c"): 2, ("a", "f"): 1, ("a", "a"): 1}
        tl = TraceLog(d)
        s_tl = tl.follows(distance=1)

        for k, v in s.items():
            assert k in s_tl
            assert s_tl[k] == v

        for k, v in s_tl.items():
            assert k in s
            assert s[k] == v
    def test_follows_distance_2(self):
        d = {("a", "b", "c"): 2, ("a", "f"): 1}
        s = {("a", "c"): 2}
        tl = TraceLog(d)
        s_tl = tl.follows(distance=2)

        for k, v in s.items():
            assert k in s_tl
            assert s_tl[k] == v

        for k, v in s_tl.items():
            assert k in s
            assert s[k] == v
Beispiel #4
0
    def test_successors(self):
        d = {("a", "b", "c"): 2, ("a", "f"): 1}
        s = {("a", "b"): 2, ("b", "c"): 2, ("a", "f"): 1}
        tl = TraceLog(d)
        s_tl = tl.successors()

        for k, v in s.items():
            assert k in s_tl
            assert s_tl[k] == v

        for k, v in s_tl.items():
            assert k in s
            assert s[k] == v
    def test_always_after_xes(self):
        tl = TraceLog.from_xes(os.path.join(DATA, "L2.xes.gz"))
        target = {
            ("[>", "[]"),
            ("[>", "a"),
            ("[>", "b"),
            ("[>", "c"),
            ("[>", "d"),
            ("a", "b"),
            ("a", "c"),
            ("a", "d"),
            ("b", "d"),
            ("c", "d"),
            ("e", "b"),
            ("e", "c"),
            ("e", "d"),
            ("e", "f"),
            ("f", "b"),
            ("f", "c"),
            ("f", "d"),
            ("a", "[]"),
            ("b", "[]"),
            ("c", "[]"),
            ("d", "[]"),
            ("e", "[]"),
            ("f", "[]"),
        }
        tl_aug = tl.augment()
        R_aa = tl_aug.always_after()

        for pair in R_aa:
            assert pair in target

        for pair in target:
            assert pair in R_aa
 def test_activity_2_freq(self):
     t = (
         "a1",
         "a2",
         "a4",
         "a5",
         "a6",
         "a3",
         "a4",
         "a5",
         "a6",
         "a4",
         "a3",
         "a5",
         "a6",
         "a2",
         "a4",
         "a5",
         "a7",
     )
     target = {
         "a1": 1,
         "a2": 2,
         "a3": 2,
         "a4": 4,
         "a5": 4,
         "a6": 3,
         "a7": 1
     }
     a2f = TraceLog.activity_2_freq(t)
     assert a2f == target
    def test_augment(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L2.txt"))
        target = {
            ("[>", "a", "b", "c", "d", "[]"):
            3,
            ("[>", "a", "c", "b", "d", "[]"):
            4,
            ("[>", "a", "b", "c", "e", "f", "b", "c", "d", "[]"):
            2,
            ("[>", "a", "b", "c", "e", "f", "c", "b", "d", "[]"):
            1,
            ("[>", "a", "c", "b", "e", "f", "b", "c", "d", "[]"):
            2,
            ("[>", "a", "c", "b", "e", "f", "b", "c", "e", "f", "c", "b", "d", "[]"):
            1,
        }
        tl_aug = tl.augment()

        for k, v in target.items():
            assert k in tl_aug
            assert tl_aug[k] == v

        for k, v in tl_aug.items():
            assert k in target
            assert target[k] == v
    def test_sum_counter_L1(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L1.txt"))
        tl_aug = tl.augment()
        target = {
            "[]": 20,
            "[>": 20,
            "a1": 20,
            "a2": 20,
            "a3": 14,
            "a4": 34,
            "a5": 34,
            "a6": 14,
            "a7": 9,
            "a8": 11,
        }

        count = tl_aug.sum_counter()

        for k, v in count.items():
            assert k in target
            assert target[k] == v

        for a, f in target.items():
            assert a in count
            assert count[a] == f
    def test_successors_L1(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L1.txt"))
        tl = tl.augment()

        target = {
            ("[>", "a1"): 20,
            ("a1", "a2"): 10,
            ("a1", "a3"): 3,
            ("a1", "a4"): 7,
            ("a2", "a4"): 13,
            ("a2", "a5"): 7,
            ("a3", "a4"): 8,
            ("a3", "a5"): 6,
            ("a4", "a2"): 7,
            ("a4", "a3"): 6,
            ("a4", "a5"): 21,
            ("a5", "a6"): 14,
            ("a5", "a7"): 9,
            ("a5", "a8"): 11,
            ("a6", "a2"): 3,
            ("a6", "a3"): 5,
            ("a6", "a4"): 6,
            ("a7", "[]"): 9,
            ("a8", "[]"): 11,
        }

        s_tl = tl.follows()

        for k, v in target.items():
            assert k in s_tl
            assert s_tl[k] == v

        for k, v in s_tl.items():
            assert k in target
            assert target[k] == v
Beispiel #10
0
    def test_never_together(self):
        d = {
            ("a", "b", "c"): 2,
            ("b", "c", "a"): 1,
            ("a", "c"): 1,
            ("f", "a"): 1,
            ("a", ): 2,
        }
        target = {("b", "f"), ("c", "f")}

        tl = TraceLog(d)
        nt = tl.never_together()

        for pair in nt:
            assert pair in target

        for pair in target:
            assert pair in nt
Beispiel #11
0
    def test_labels(self):
        d = {("a", "b", "c"): 2, ("a", "f"): 1}
        labels = ["a", "b", "c", "f"]
        tl = TraceLog(d)

        for a in tl.labels:
            assert a in labels

        for a in labels:
            assert a in tl.labels
Beispiel #12
0
    def test_equivalence_L4(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L4.txt"))
        target = {("[]", "[>")}
        tl_aug = tl.augment()
        R_eq = tl_aug.equivalence()

        for el in target:
            assert el in R_eq or el[::-1] in R_eq

        for el in R_eq:
            assert el in target or el[::-1] in target
Beispiel #13
0
    def test_never_together_L1(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L1.txt"))
        target = {("a7", "a8")}

        nt = tl.never_together()

        for pair in nt:
            assert pair in target

        for pair in target:
            assert pair in nt
Beispiel #14
0
    def test_always_after_L1(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L1.txt"))
        target = {("[>", "a1"), ("[>", "a4"), ("[>", "a5"), ("[>", "[]"),
                  ("a1", "a4"), ("a1", "a5"), ("a1", "[]"), ("a2", "a5"),
                  ("a2", "[]"), ("a3", "[]"), ("a3", "a5"), ("a4", "a5"),
                  ("a4", "[]"), ("a5", "[]"), ("a6", "a4"), ("a6", "a5"),
                  ("a6", "[]"), ("a7", "[]"), ("a8", "[]")}
        tl_aug = tl.augment()
        R_aa = tl_aug.always_after()

        for pair in R_aa:
            assert pair in target

        for pair in target:
            assert pair in R_aa
Beispiel #15
0
    def test_from_xes_gunzip(self):
        tl = TraceLog.from_xes(os.path.join(DATA, "L2.xes.gz"))
        target = {
            ("a", "b", "c", "d"): 3,
            ("a", "c", "b", "d"): 4,
            ("a", "b", "c", "e", "f", "b", "c", "d"): 2,
            ("a", "b", "c", "e", "f", "c", "b", "d"): 1,
            ("a", "c", "b", "e", "f", "b", "c", "d"): 2,
            ("a", "c", "b", "e", "f", "b", "c", "e", "f", "c", "b", "d"): 1,
        }

        for k, v in target.items():
            assert k in tl
            assert tl[k] == v

        for k, v in tl.items():
            assert k in target
            assert target[k] == v
Beispiel #16
0
    def test_equivalence_L2(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L2.txt"))
        target = {
            ("[]", "[>"),
            ("a", "[]"),
            ("a", "[>"),
            ("d", "[]"),
            ("d", "[>"),
            ("a", "d"),
            ("b", "c"),
            ("e", "f"),
        }
        tl_aug = tl.augment()
        R_eq = tl_aug.equivalence()

        for el in target:
            assert el in R_eq or el[::-1] in R_eq

        for el in R_eq:
            assert el in target or el[::-1] in target
Beispiel #17
0
    def test_max_counter_L4(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L4.txt"))
        tl_aug = tl.augment()
        target = {
            "[]": 1,
            "[>": 1,
            "a": 1,
            "b": 1,
            "c": 2,
            "d": 1,
            "e": 1,
        }
        count = tl_aug.max_counter()

        for k, v in count.items():
            assert k in target
            assert target[k] == v

        for a, f in target.items():
            assert a in count
            assert count[a] == f
Beispiel #18
0
    def test_filter_traces(self):
        tl = TraceLog.from_xes(os.path.join(DATA, "L2.xes"))

        reqA = {'a', 'b', 'c'}
        forbA = {'e', 'f'}

        # target = {
        #     ('a', 'b', 'c', 'e', 'f', 'b', 'c', 'd') : 2,
        #     ('a', 'b', 'c', 'e', 'f', 'c', 'b', 'd') : 1,
        #     ('a', 'c', 'b', 'e', 'f', 'b', 'c', 'd') : 2,
        #     ('a', 'c', 'b', 'e', 'f', 'b', 'c', 'e', 'f', 'c', 'b', 'd') : 1
        # }

        target = {('a', 'b', 'c', 'd'): 3, ('a', 'c', 'b', 'd'): 4}

        fa = tl.filter_traces(reqA, forbA)

        for k, v in fa.items():
            assert k, v in target

        for k, v in tl.items():
            assert k, v in fa
Beispiel #19
0
    def test_sum_counter_L4(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L4.txt"))
        tl_aug = tl.augment()
        target = {
            "[]": 255,
            "[>": 255,
            "a": 128,
            "b": 127,
            "c": 363,
            "d": 174,
            "e": 81,
        }

        count = tl_aug.sum_counter()
        print(count)

        for k, v in count.items():
            assert k in target
            assert target[k] == v

        for a, f in target.items():
            assert a in count
            assert count[a] == f
Beispiel #20
0
 def test_freq_2_activities(self):
     t = (
         "a1",
         "a2",
         "a4",
         "a5",
         "a6",
         "a3",
         "a4",
         "a5",
         "a6",
         "a4",
         "a3",
         "a5",
         "a6",
         "a2",
         "a4",
         "a5",
         "a7",
     )
     target = {1: {"a1", "a7"}, 2: {"a2", "a3"}, 3: {"a6"}, 4: {"a4", "a5"}}
     f2a = TraceLog.freq_2_activities(t)
     assert f2a == target
Beispiel #21
0
def process(dataset):
    tl = (TraceLog.from_xes(dataset))
    tl_aug = tl.augment()
    session["dataset"] = tl_aug
Beispiel #22
0
 def test_successors_exception_no_integer_distance(self):
     d = {("a", "b", "c"): 2, ("a", "a", "f"): 1}
     tl = TraceLog(d)
     with pytest.raises(ValueError):
         tl.successors(distance=1.2)
Beispiel #23
0
    def test_mine(self):
        tl = TraceLog.from_txt(os.path.join(DATA, "L1.txt"))
        miner = LogSkeleton()
        results = miner.mine(tl, {}, {})

        target_results = {
            "relationships": {
                "equivalence": {("[]", "[>"), ("a1", "[]"), ("a1", "[>"), ("a4", "a5")},
                "alwaysAfter": {
                    ("[>", "a1"),
                    ("[>", "a4"),
                    ("[>", "a5"),
                    ("[>", "[]"),
                    ("a1", "a4"),
                    ("a1", "a5"),
                    ("a1", "[]"),
                    ("a2", "a5"),
                    ("a2", "[]"),
                    ("a3", "[]"),
                    ("a3", "a5"),
                    ("a4", "a5"),
                    ("a4", "[]"),
                    ("a5", "[]"),
                    ("a6", "a4"),
                    ("a6", "a5"),
                    ("a6", "[]"),
                    ("a7", "[]"),
                    ("a8", "[]"),
                },
                "alwaysBefore": {
                    ("a1", "[>"),
                    ("a2", "[>"),
                    ("a3", "[>"),
                    ("a4", "[>"),
                    ("a5", "[>"),
                    ("a6", "[>"),
                    ("a7", "[>"),
                    ("a8", "[>"),
                    ("[]", "[>"),
                    ("a2", "a1"),
                    ("a3", "a1"),
                    ("a4", "a1"),
                    ("a5", "a1"),
                    ("a6", "a1"),
                    ("a7", "a1"),
                    ("a8", "a1"),
                    ("[]", "a1"),
                    ("a5", "a4"),
                    ("a6", "a4"),
                    ("a7", "a4"),
                    ("a8", "a4"),
                    ("[]", "a4"),
                    ("a6", "a5"),
                    ("a7", "a5"),
                    ("a8", "a5"),
                    ("[]", "a5"),
                },
                "neverTogether": {("a7", "a8")},
                "dependency": {
                    ("[>", "a1"),
                    ("a1", "a2"),
                    ("a1", "a3"),
                    ("a1", "a4"),
                    ("a2", "a4"),
                    ("a2", "a5"),
                    ("a3", "a4"),
                    ("a3", "a5"),
                    ("a4", "a2"),
                    ("a4", "a3"),
                    ("a4", "a5"),
                    ("a5", "a6"),
                    ("a5", "a7"),
                    ("a5", "a8"),
                    ("a6", "a2"),
                    ("a6", "a3"),
                    ("a6", "a4"),
                    ("a7", "[]"),
                    ("a8", "[]"),
                },
            },
            "statistics": {
                "dependency": {
                    ("[>", "a1"): 20,
                    ("a1", "a2"): 10,
                    ("a1", "a3"): 3,
                    ("a1", "a4"): 7,
                    ("a2", "a4"): 13,
                    ("a2", "a5"): 7,
                    ("a3", "a4"): 8,
                    ("a3", "a5"): 6,
                    ("a4", "a2"): 7,
                    ("a4", "a3"): 6,
                    ("a4", "a5"): 21,
                    ("a5", "a6"): 14,
                    ("a5", "a7"): 9,
                    ("a5", "a8"): 11,
                    ("a6", "a2"): 3,
                    ("a6", "a3"): 5,
                    ("a6", "a4"): 6,
                    ("a7", "[]"): 9,
                    ("a8", "[]"): 11,
                },
                "sum": {
                    "[]": 20,
                    "[>": 20,
                    "a1": 20,
                    "a2": 20,
                    "a3": 14,
                    "a4": 34,
                    "a5": 34,
                    "a6": 14,
                    "a7": 9,
                    "a8": 11,
                },
                "max": {
                    "[]": 1,
                    "[>": 1,
                    "a1": 1,
                    "a2": 3,
                    "a3": 2,
                    "a4": 4,
                    "a5": 4,
                    "a6": 3,
                    "a7": 1,
                    "a8": 1,
                },
                "min": {
                    "[]": 1,
                    "[>": 1,
                    "a1": 1,
                    "a2": 0,
                    "a3": 0,
                    "a4": 1,
                    "a5": 1,
                    "a6": 0,
                    "a7": 0,
                    "a8": 0,
                },
            },
        }
Beispiel #24
0
 def test_follows_exception_no_positive_integer(self):
     d = {("a", "b", "c"): 2, ("a", "a", "f"): 1}
     tl = TraceLog(d)
     with pytest.raises(ValueError):
         tl.follows(distance=-3.3)
Beispiel #25
0
 def test_from_txt_exception_invalid_frequency(self):
     with pytest.raises(IllegalLogAction):
         tl = TraceLog.from_txt(
             os.path.join(DATA, "L2_invalid_frequency.txt"))
Beispiel #26
0
 def test_from_txt_exception_duplicate_trace(self):
     with pytest.raises(IllegalLogAction):
         tl = TraceLog.from_txt(os.path.join(DATA,
                                             "L2_duplicate_trace.txt"))