Spaces:
Sleeping
Sleeping
import os | |
from pm4py.algo.analysis.woflan import algorithm as woflan | |
from pm4py.objects.log.importer.xes import importer as xes_import | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
from pm4py.objects.petri_net.obj import PetriNet, Marking | |
from pm4py.objects.petri_net.utils import petri_utils | |
from pm4py.algo.analysis.woflan.graphs.minimal_coverability_graph import minimal_coverability_graph | |
import unittest | |
from pm4py.objects.conversion.process_tree import converter as process_tree_converter | |
class WoflanTest(unittest.TestCase): | |
def test_running_example_alpha(self): | |
path = os.path.join("input_data", "running-example.xes") | |
log = xes_import.apply(path) | |
net, i_m, f_m = alpha_miner.apply(log) | |
self.assertTrue(woflan.apply(net, i_m, f_m, parameters={"print_diagnostics": False})) | |
def test_running_example_inductive(self): | |
path = os.path.join("input_data", "running-example.xes") | |
log = xes_import.apply(path) | |
process_tree = inductive_miner.apply(log) | |
net, im, fm = process_tree_converter.apply(process_tree) | |
self.assertTrue(woflan.apply(net, im, fm, parameters={"print_diagnostics": False})) | |
def test_figure415(self): | |
net = PetriNet("figure_4_15") | |
p_1 = PetriNet.Place("p_1") | |
p_2 = PetriNet.Place("p_2") | |
p_3 = PetriNet.Place("p_3") | |
p_4 = PetriNet.Place("p_4") | |
p_5 = PetriNet.Place("p_5") | |
p_6 = PetriNet.Place("p_6") | |
p_7 = PetriNet.Place("p_7") | |
net.places.add(p_1) | |
net.places.add(p_2) | |
net.places.add(p_3) | |
net.places.add(p_4) | |
net.places.add(p_5) | |
net.places.add(p_6) | |
net.places.add(p_7) | |
t_1 = PetriNet.Transition("t_1", "t_1") | |
t_2 = PetriNet.Transition("t_2", "t_2") | |
t_3 = PetriNet.Transition("t_3", "t_3") | |
t_4 = PetriNet.Transition("t_4", "t_4") | |
t_5 = PetriNet.Transition("t_5", "t_5") | |
t_6 = PetriNet.Transition("t_6", "t_6") | |
net.transitions.add(t_1) | |
net.transitions.add(t_2) | |
net.transitions.add(t_3) | |
net.transitions.add(t_4) | |
net.transitions.add(t_5) | |
net.transitions.add(t_6) | |
petri_utils.add_arc_from_to(p_1, t_1, net) | |
petri_utils.add_arc_from_to(t_1, p_3, net) | |
petri_utils.add_arc_from_to(t_1, p_2, net) | |
petri_utils.add_arc_from_to(t_1, p_5, net) | |
petri_utils.add_arc_from_to(p_5, t_2, net) | |
petri_utils.add_arc_from_to(p_5, t_5, net) | |
petri_utils.add_arc_from_to(p_3, t_2, net) | |
petri_utils.add_arc_from_to(p_3, t_4, net) | |
petri_utils.add_arc_from_to(t_2, p_6, net) | |
petri_utils.add_arc_from_to(t_2, p_4, net) | |
petri_utils.add_arc_from_to(t_5, p_5, net) | |
petri_utils.add_arc_from_to(t_5, p_3, net) | |
petri_utils.add_arc_from_to(p_2, t_2, net) | |
petri_utils.add_arc_from_to(t_3, p_2, net) | |
petri_utils.add_arc_from_to(t_3, p_3, net) | |
petri_utils.add_arc_from_to(t_3, p_4, net) | |
petri_utils.add_arc_from_to(p_6, t_5, net) | |
petri_utils.add_arc_from_to(p_6, t_6, net) | |
petri_utils.add_arc_from_to(p_6, t_3, net) | |
petri_utils.add_arc_from_to(t_4, p_6, net) | |
petri_utils.add_arc_from_to(t_4, p_5, net) | |
petri_utils.add_arc_from_to(p_4, t_3, net) | |
petri_utils.add_arc_from_to(p_4, t_6, net) | |
petri_utils.add_arc_from_to(p_4, t_4, net) | |
petri_utils.add_arc_from_to(t_6, p_7, net) | |
initial_marking = Marking() | |
initial_marking[p_1] = 1 | |
final_marking = Marking() | |
final_marking[p_7] = 1 | |
self.assertTrue(woflan.apply(net, initial_marking, final_marking, parameters={"print_diagnostics": False})) | |
def test_figure42(self): | |
net = PetriNet("figure_4_2") | |
p_1 = PetriNet.Place("p_1") | |
p_2 = PetriNet.Place("p_2") | |
p_3 = PetriNet.Place("p_3") | |
p_4 = PetriNet.Place("p_4") | |
p_5 = PetriNet.Place("p_5") | |
p_6 = PetriNet.Place("p_6") | |
p_7 = PetriNet.Place("p_7") | |
p_8 = PetriNet.Place("p_8") | |
net.places.add(p_1) | |
net.places.add(p_2) | |
net.places.add(p_3) | |
net.places.add(p_4) | |
net.places.add(p_5) | |
net.places.add(p_6) | |
net.places.add(p_7) | |
net.places.add(p_8) | |
t_1 = PetriNet.Transition("t_1", "t_1") | |
t_2 = PetriNet.Transition("t_2", "t_2") | |
t_3 = PetriNet.Transition("t_3", "t_3") | |
t_4 = PetriNet.Transition("t_4", "t_4") | |
t_5 = PetriNet.Transition("t_5", "t_5") | |
t_6 = PetriNet.Transition("t_6", "t_6") | |
t_7 = PetriNet.Transition("t_7", "t_7") | |
t_8 = PetriNet.Transition("t_8", "t_8") | |
net.transitions.add(t_1) | |
net.transitions.add(t_2) | |
net.transitions.add(t_3) | |
net.transitions.add(t_4) | |
net.transitions.add(t_5) | |
net.transitions.add(t_6) | |
net.transitions.add(t_7) | |
net.transitions.add(t_8) | |
petri_utils.add_arc_from_to(p_1, t_1, net) | |
petri_utils.add_arc_from_to(t_1, p_6, net) | |
petri_utils.add_arc_from_to(t_1, p_4, net) | |
petri_utils.add_arc_from_to(p_4, t_4, net) | |
petri_utils.add_arc_from_to(p_4, t_5, net) | |
petri_utils.add_arc_from_to(t_2, p_6, net) | |
petri_utils.add_arc_from_to(t_2, p_4, net) | |
petri_utils.add_arc_from_to(t_4, p_3, net) | |
petri_utils.add_arc_from_to(t_4, p_5, net) | |
petri_utils.add_arc_from_to(t_5, p_7, net) | |
petri_utils.add_arc_from_to(t_7, p_4, net) | |
petri_utils.add_arc_from_to(p_3, t_2, net) | |
petri_utils.add_arc_from_to(p_3, t_3, net) | |
petri_utils.add_arc_from_to(p_5, t_2, net) | |
petri_utils.add_arc_from_to(p_5, t_3, net) | |
petri_utils.add_arc_from_to(p_5, t_4, net) | |
petri_utils.add_arc_from_to(p_7, t_6, net) | |
petri_utils.add_arc_from_to(p_8, t_7, net) | |
petri_utils.add_arc_from_to(p_8, t_8, net) | |
petri_utils.add_arc_from_to(t_3, p_2, net) | |
petri_utils.add_arc_from_to(p_6, t_6, net) | |
petri_utils.add_arc_from_to(t_6, p_5, net) | |
petri_utils.add_arc_from_to(t_8, p_8, net) | |
initial_marking = Marking() | |
initial_marking[p_1] = 1 | |
final_marking = Marking() | |
final_marking[p_2] = 1 | |
self.assertFalse(woflan.apply(net, initial_marking, final_marking, parameters={"print_diagnostics": False})) | |
def test_mcg(self): | |
net = PetriNet("mcg") | |
p_1 = PetriNet.Place("p_1") | |
p_2 = PetriNet.Place("p_2") | |
p_3 = PetriNet.Place("p_3") | |
p_4 = PetriNet.Place("p_4") | |
p_5 = PetriNet.Place("p_5") | |
net.places.add(p_1) | |
net.places.add(p_2) | |
net.places.add(p_3) | |
net.places.add(p_4) | |
net.places.add(p_5) | |
t_1 = PetriNet.Transition("t_1", "t_1") | |
t_2 = PetriNet.Transition("t_2", "t_2") | |
t_3 = PetriNet.Transition("t_3", "t_3") | |
t_4 = PetriNet.Transition("t_4", "t_4") | |
t_5 = PetriNet.Transition("t_5", "t_5") | |
t_6 = PetriNet.Transition("t_6", "t_6") | |
net.transitions.add(t_1) | |
net.transitions.add(t_2) | |
net.transitions.add(t_3) | |
net.transitions.add(t_4) | |
net.transitions.add(t_5) | |
net.transitions.add(t_6) | |
petri_utils.add_arc_from_to(p_1, t_1, net) | |
petri_utils.add_arc_from_to(t_1, p_2, net) | |
petri_utils.add_arc_from_to(p_2, t_3, net) | |
petri_utils.add_arc_from_to(t_3, p_3, net, weight=2) | |
petri_utils.add_arc_from_to(p_3, t_4, net) | |
petri_utils.add_arc_from_to(t_4, p_2, net) | |
petri_utils.add_arc_from_to(p_1, t_2, net) | |
petri_utils.add_arc_from_to(t_2, p_4, net) | |
petri_utils.add_arc_from_to(p_4, t_5, net) | |
petri_utils.add_arc_from_to(t_5, p_5, net, weight=2) | |
petri_utils.add_arc_from_to(p_5, t_6, net) | |
petri_utils.add_arc_from_to(t_6, p_4, net) | |
initial_marking = Marking() | |
initial_marking[p_1] = 1 | |
mcg = minimal_coverability_graph.apply(net, initial_marking) | |
if __name__ == '__main__': | |
unittest.main() | |