Spaces:
Sleeping
Sleeping
from pm4py.objects.log.util import dataframe_utils | |
import unittest | |
import importlib.util | |
import os | |
from pm4py.util import constants, pandas_utils | |
from pm4py.objects.conversion.process_tree import converter as process_tree_converter | |
class DocTests(unittest.TestCase): | |
def load_running_example_xes(self): | |
from pm4py.objects.log.importer.xes import importer | |
log = importer.apply(os.path.join("input_data", "running-example.xes")) | |
return log | |
def load_running_example_df(self): | |
df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) | |
df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) | |
return df | |
def load_running_example_stream(self): | |
from pm4py.objects.conversion.log import converter | |
df = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv")) | |
df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) | |
stream = converter.apply(df, variant=converter.TO_EVENT_STREAM) | |
return stream | |
def load_running_example_pnml(self): | |
from pm4py.objects.petri_net.importer import importer | |
net, im, fm = importer.apply(os.path.join("input_data", "running-example.pnml")) | |
return net, im, fm | |
def load_receipt_xes(self): | |
from pm4py.objects.log.importer.xes import importer | |
log = importer.apply(os.path.join("input_data", "receipt.xes")) | |
return log | |
def load_receipt_df(self): | |
df = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) | |
df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) | |
return df | |
def load_receipt_stream(self): | |
from pm4py.objects.conversion.log import converter | |
df = pandas_utils.read_csv(os.path.join("input_data", "receipt.csv")) | |
df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) | |
stream = converter.apply(df, variant=converter.TO_EVENT_STREAM) | |
return stream | |
def load_roadtraffic50_xes(self): | |
from pm4py.objects.log.importer.xes import importer | |
log = importer.apply(os.path.join("input_data", "roadtraffic50traces.xes")) | |
return log | |
def load_roadtraffic100_xes(self): | |
from pm4py.objects.log.importer.xes import importer | |
log = importer.apply(os.path.join("input_data", "roadtraffic100traces.xes")) | |
return log | |
def load_roadtraffic100_csv(self): | |
from pm4py.objects.log.importer.xes import importer | |
log = importer.apply(os.path.join("input_data", "roadtraffic100traces.csv")) | |
return log | |
def test_1(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
def test_2(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
variant = xes_importer.Variants.ITERPARSE | |
parameters = {variant.value.Parameters.TIMESTAMP_SORT: True} | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes"), | |
variant=variant, parameters=parameters) | |
def test_3(self): | |
from pm4py.objects.conversion.log import converter as log_converter | |
log_csv = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv"), sep=',') | |
event_log = log_converter.apply(log_csv, variant=log_converter.Variants.TO_EVENT_LOG) | |
def test_4(self): | |
from pm4py.objects.conversion.log import converter as log_converter | |
log_csv = pandas_utils.read_csv(os.path.join("input_data", "running-example.csv"), sep=',') | |
log_csv = log_csv.rename(columns={'case:concept:name': 'case'}) | |
parameters = {log_converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY: 'case'} | |
event_log = log_converter.apply(log_csv, parameters=parameters, variant=log_converter.Variants.TO_EVENT_LOG) | |
def test_5(self): | |
log = self.load_running_example_xes() | |
from pm4py.objects.log.exporter.xes import exporter as xes_exporter | |
path = os.path.join("test_output_data", "ru.xes") | |
xes_exporter.apply(log, path) | |
os.remove(path) | |
def test_6(self): | |
log = self.load_running_example_xes() | |
from pm4py.objects.conversion.log import converter as log_converter | |
dataframe = log_converter.apply(log, variant=log_converter.Variants.TO_DATA_FRAME) | |
dataframe.to_csv("ru.csv") | |
os.remove("ru.csv") | |
def test_8(self): | |
from pm4py.algo.filtering.log.timestamp import timestamp_filter | |
log = self.load_running_example_xes() | |
filtered_log = timestamp_filter.filter_traces_contained(log, "2011-03-09 00:00:00", "2012-01-18 23:59:59") | |
def test_9(self): | |
from pm4py.algo.filtering.pandas.timestamp import timestamp_filter | |
dataframe = self.load_running_example_df() | |
df_timest_intersecting = timestamp_filter.filter_traces_intersecting(dataframe, "2011-03-09 00:00:00", | |
"2012-01-18 23:59:59", parameters={ | |
timestamp_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
timestamp_filter.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
def test_10(self): | |
from pm4py.algo.filtering.log.timestamp import timestamp_filter | |
log = self.load_running_example_xes() | |
filtered_log = timestamp_filter.filter_traces_intersecting(log, "2011-03-09 00:00:00", "2012-01-18 23:59:59") | |
def test_11(self): | |
from pm4py.algo.filtering.pandas.timestamp import timestamp_filter | |
dataframe = self.load_running_example_df() | |
df_timest_intersecting = timestamp_filter.filter_traces_intersecting(dataframe, "2011-03-09 00:00:00", | |
"2012-01-18 23:59:59", parameters={ | |
timestamp_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
timestamp_filter.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
def test_12(self): | |
from pm4py.algo.filtering.log.timestamp import timestamp_filter | |
log = self.load_running_example_xes() | |
filtered_log_events = timestamp_filter.apply_events(log, "2011-03-09 00:00:00", "2012-01-18 23:59:59") | |
def test_13(self): | |
from pm4py.algo.filtering.pandas.timestamp import timestamp_filter | |
dataframe = self.load_running_example_df() | |
df_timest_events = timestamp_filter.apply_events(dataframe, "2011-03-09 00:00:00", "2012-01-18 23:59:59", | |
parameters={ | |
timestamp_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
timestamp_filter.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
def test_14(self): | |
from pm4py.algo.filtering.log.cases import case_filter | |
log = self.load_running_example_xes() | |
filtered_log = case_filter.filter_case_performance(log, 86400, 864000) | |
def test_15(self): | |
from pm4py.algo.filtering.pandas.cases import case_filter | |
dataframe = self.load_running_example_df() | |
df_cases = case_filter.filter_case_performance(dataframe, min_case_performance=86400, | |
max_case_performance=864000, parameters={ | |
case_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
case_filter.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
def test_22(self): | |
from pm4py.algo.filtering.log.variants import variants_filter | |
log = self.load_running_example_xes() | |
variants = variants_filter.get_variants(log) | |
def test_23(self): | |
from pm4py.statistics.traces.generic.pandas import case_statistics | |
df = self.load_running_example_df() | |
variants = case_statistics.get_variants_df(df, | |
parameters={ | |
case_statistics.Parameters.CASE_ID_KEY: "case:concept:name", | |
case_statistics.Parameters.ACTIVITY_KEY: "concept:name"}) | |
def test_24(self): | |
from pm4py.statistics.traces.generic.log import case_statistics | |
log = self.load_running_example_xes() | |
variants_count = case_statistics.get_variant_statistics(log) | |
variants_count = sorted(variants_count, key=lambda x: x['count'], reverse=True) | |
def test_25(self): | |
from pm4py.statistics.traces.generic.pandas import case_statistics | |
df = self.load_running_example_df() | |
variants_count = case_statistics.get_variant_statistics(df, | |
parameters={ | |
case_statistics.Parameters.CASE_ID_KEY: "case:concept:name", | |
case_statistics.Parameters.ACTIVITY_KEY: "concept:name", | |
case_statistics.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
variants_count = sorted(variants_count, key=lambda x: x['case:concept:name'], reverse=True) | |
def test_26(self): | |
from pm4py.algo.filtering.log.variants import variants_filter | |
log = self.load_running_example_xes() | |
variants = ["register request,examine thoroughly,check ticket,decide,reject request"] | |
filtered_log1 = variants_filter.apply(log, variants) | |
def test_27(self): | |
from pm4py.algo.filtering.pandas.variants import variants_filter | |
df = self.load_running_example_df() | |
variants = ["register request,examine thoroughly,check ticket,decide,reject request"] | |
filtered_df1 = variants_filter.apply(df, variants, | |
parameters={variants_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
variants_filter.Parameters.ACTIVITY_KEY: "concept:name"}) | |
def test_28(self): | |
from pm4py.algo.filtering.log.variants import variants_filter | |
log = self.load_running_example_xes() | |
variants = ["register request,examine thoroughly,check ticket,decide,reject request"] | |
filtered_log2 = variants_filter.apply(log, variants, parameters={variants_filter.Parameters.POSITIVE: False}) | |
def test_29(self): | |
from pm4py.algo.filtering.pandas.variants import variants_filter | |
df = self.load_running_example_df() | |
variants = ["register request,examine thoroughly,check ticket,decide,reject request"] | |
filtered_df2 = variants_filter.apply(df, variants, | |
parameters={variants_filter.Parameters.POSITIVE: False, | |
variants_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
variants_filter.Parameters.ACTIVITY_KEY: "concept:name"}) | |
def test_32(self): | |
from pm4py.algo.filtering.log.attributes import attributes_filter | |
log = self.load_running_example_xes() | |
activities = attributes_filter.get_attribute_values(log, "concept:name") | |
resources = attributes_filter.get_attribute_values(log, "org:resource") | |
def test_33(self): | |
from pm4py.algo.filtering.pandas.attributes import attributes_filter | |
df = self.load_running_example_df() | |
activities = attributes_filter.get_attribute_values(df, attribute_key="concept:name") | |
resources = attributes_filter.get_attribute_values(df, attribute_key="org:resource") | |
def test_34(self): | |
from pm4py.algo.filtering.log.attributes import attributes_filter | |
log = self.load_receipt_xes() | |
tracefilter_log_pos = attributes_filter.apply(log, ["Resource10"], | |
parameters={ | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "org:resource", | |
attributes_filter.Parameters.POSITIVE: True}) | |
tracefilter_log_neg = attributes_filter.apply(log, ["Resource10"], | |
parameters={ | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "org:resource", | |
attributes_filter.Parameters.POSITIVE: False}) | |
def test_35(self): | |
from pm4py.algo.filtering.pandas.attributes import attributes_filter | |
df = self.load_receipt_df() | |
df_traces_pos = attributes_filter.apply(df, ["Resource10"], | |
parameters={ | |
attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "org:resource", | |
attributes_filter.Parameters.POSITIVE: True}) | |
df_traces_neg = attributes_filter.apply(df, ["Resource10"], | |
parameters={ | |
attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "org:resource", | |
attributes_filter.Parameters.POSITIVE: False}) | |
def test_38(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "roadtraffic100traces.xes")) | |
from pm4py.algo.filtering.log.attributes import attributes_filter | |
filtered_log_events = attributes_filter.apply_numeric_events(log, 34, 36, | |
parameters={ | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "amount"}) | |
filtered_log_cases = attributes_filter.apply_numeric(log, 34, 36, | |
parameters={ | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "amount"}) | |
filtered_log_cases = attributes_filter.apply_numeric(log, 34, 500, | |
parameters={ | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "amount", | |
attributes_filter.Parameters.STREAM_FILTER_KEY1: "concept:name", | |
attributes_filter.Parameters.STREAM_FILTER_VALUE1: "Add penalty"}) | |
def test_39(self): | |
import os | |
df = pandas_utils.read_csv(os.path.join("input_data", "roadtraffic100traces.csv")) | |
df = dataframe_utils.convert_timestamp_columns_in_df(df, timest_format=constants.DEFAULT_TIMESTAMP_PARSE_FORMAT) | |
from pm4py.algo.filtering.pandas.attributes import attributes_filter | |
filtered_df_events = attributes_filter.apply_numeric_events(df, 34, 36, | |
parameters={ | |
attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "amount"}) | |
filtered_df_cases = attributes_filter.apply_numeric(df, 34, 36, | |
parameters={ | |
attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "amount"}) | |
filtered_df_cases = attributes_filter.apply_numeric(df, 34, 500, | |
parameters={ | |
attributes_filter.Parameters.CASE_ID_KEY: "case:concept:name", | |
attributes_filter.Parameters.ATTRIBUTE_KEY: "amount", | |
attributes_filter.Parameters.STREAM_FILTER_KEY1: "concept:name", | |
attributes_filter.Parameters.STREAM_FILTER_VALUE1: "Add penalty"}) | |
def test_40(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
net, initial_marking, final_marking = alpha_miner.apply(log) | |
def test_41(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
process_tree = inductive_miner.apply(log) | |
net, initial_marking, final_marking = process_tree_converter.apply(process_tree) | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
from pm4py.visualization.process_tree import visualizer as pt_visualizer | |
tree = inductive_miner.apply(log) | |
gviz = pt_visualizer.apply(tree) | |
from pm4py.objects.conversion.process_tree import converter as pt_converter | |
net, initial_marking, final_marking = pt_converter.apply(tree, variant=pt_converter.Variants.TO_PETRI_NET) | |
def test_42(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
log_path = os.path.join("compressed_input_data", "09_a32f0n00.xes.gz") | |
log = xes_importer.apply(log_path) | |
from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner | |
heu_net = heuristics_miner.apply_heu(log, parameters={ | |
heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99}) | |
from pm4py.visualization.heuristics_net import visualizer as hn_visualizer | |
gviz = hn_visualizer.apply(heu_net) | |
from pm4py.algo.discovery.heuristics import algorithm as heuristics_miner | |
net, im, fm = heuristics_miner.apply(log, parameters={ | |
heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99}) | |
from pm4py.visualization.petri_net import visualizer as pn_visualizer | |
gviz = pn_visualizer.apply(net, im, fm) | |
def test_43(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.dfg import algorithm as dfg_discovery | |
dfg = dfg_discovery.apply(log) | |
from pm4py.visualization.dfg import visualizer as dfg_visualization | |
gviz = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.FREQUENCY) | |
def test_44(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.dfg import algorithm as dfg_discovery | |
from pm4py.visualization.dfg import visualizer as dfg_visualization | |
dfg = dfg_discovery.apply(log, variant=dfg_discovery.Variants.PERFORMANCE) | |
gviz = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.PERFORMANCE) | |
def test_45(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.dfg import algorithm as dfg_discovery | |
from pm4py.visualization.dfg import visualizer as dfg_visualization | |
dfg = dfg_discovery.apply(log, variant=dfg_discovery.Variants.PERFORMANCE) | |
parameters = {dfg_visualization.Variants.PERFORMANCE.value.Parameters.FORMAT: "svg"} | |
gviz = dfg_visualization.apply(dfg, log=log, variant=dfg_visualization.Variants.PERFORMANCE, | |
parameters=parameters) | |
dfg_visualization.save(gviz, os.path.join("test_output_data", "dfg.svg")) | |
os.remove(os.path.join("test_output_data", "dfg.svg")) | |
def test_46(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.dfg import algorithm as dfg_discovery | |
dfg = dfg_discovery.apply(log) | |
from pm4py.objects.conversion.dfg import converter as dfg_mining | |
net, im, fm = dfg_mining.apply(dfg) | |
def test_47(self): | |
log = self.load_running_example_xes() | |
import os | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
process_tree = inductive_miner.apply(log) | |
net, initial_marking, final_marking = process_tree_converter.apply(process_tree) | |
from pm4py.visualization.petri_net import visualizer as pn_visualizer | |
parameters = {pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "png"} | |
gviz = pn_visualizer.apply(net, initial_marking, final_marking, parameters=parameters, | |
variant=pn_visualizer.Variants.FREQUENCY, log=log) | |
pn_visualizer.save(gviz, os.path.join("test_output_data", "inductive_frequency.png")) | |
os.remove(os.path.join("test_output_data", "inductive_frequency.png")) | |
def test_48(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
parameters = {alpha_miner.Variants.ALPHA_VERSION_CLASSIC.value.Parameters.ACTIVITY_KEY: "concept:name"} | |
net, initial_marking, final_marking = alpha_miner.apply(log, parameters=parameters) | |
def test_49(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) | |
classifiers = log.classifiers | |
from pm4py.objects.log.util import insert_classifier | |
log, activity_key = insert_classifier.insert_activity_classifier_attribute(log, "Activity classifier") | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
parameters = {alpha_miner.Variants.ALPHA_VERSION_CLASSIC.value.Parameters.ACTIVITY_KEY: activity_key} | |
net, initial_marking, final_marking = alpha_miner.apply(log, parameters=parameters) | |
def test_50(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) | |
for trace in log: | |
for event in trace: | |
event["customClassifier"] = event["concept:name"] + event["lifecycle:transition"] | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
parameters = {alpha_miner.Variants.ALPHA_VERSION_CLASSIC.value.Parameters.ACTIVITY_KEY: "customClassifier"} | |
net, initial_marking, final_marking = alpha_miner.apply(log, parameters=parameters) | |
def test_51(self): | |
import os | |
from pm4py.objects.petri_net.importer import importer as pnml_importer | |
net, initial_marking, final_marking = pnml_importer.apply( | |
os.path.join("input_data", "running-example.pnml")) | |
from pm4py.visualization.petri_net import visualizer as pn_visualizer | |
gviz = pn_visualizer.apply(net, initial_marking, final_marking) | |
from pm4py.objects.petri_net.exporter import exporter as pnml_exporter | |
pnml_exporter.apply(net, initial_marking, "petri.pnml") | |
pnml_exporter.apply(net, initial_marking, "petri_final.pnml", final_marking=final_marking) | |
os.remove("petri.pnml") | |
os.remove("petri_final.pnml") | |
from pm4py.objects.petri_net import semantics | |
transitions = semantics.enabled_transitions(net, initial_marking) | |
places = net.places | |
transitions = net.transitions | |
arcs = net.arcs | |
for place in places: | |
stru = "\nPLACE: " + place.name | |
for arc in place.in_arcs: | |
stru = str(arc.source.name) + " " + str(arc.source.label) | |
def test_52(self): | |
# creating an empty Petri net | |
from pm4py.objects.petri_net.obj import PetriNet, Marking | |
net = PetriNet("new_petri_net") | |
# creating source, p_1 and sink place | |
source = PetriNet.Place("source") | |
sink = PetriNet.Place("sink") | |
p_1 = PetriNet.Place("p_1") | |
# add the places to the Petri Net | |
net.places.add(source) | |
net.places.add(sink) | |
net.places.add(p_1) | |
# Create transitions | |
t_1 = PetriNet.Transition("name_1", "label_1") | |
t_2 = PetriNet.Transition("name_2", "label_2") | |
# Add the transitions to the Petri Net | |
net.transitions.add(t_1) | |
net.transitions.add(t_2) | |
# Add arcs | |
from pm4py.objects.petri_net.utils import petri_utils | |
petri_utils.add_arc_from_to(source, t_1, net) | |
petri_utils.add_arc_from_to(t_1, p_1, net) | |
petri_utils.add_arc_from_to(p_1, t_2, net) | |
petri_utils.add_arc_from_to(t_2, sink, net) | |
# Adding tokens | |
initial_marking = Marking() | |
initial_marking[source] = 1 | |
final_marking = Marking() | |
final_marking[sink] = 1 | |
from pm4py.objects.petri_net.exporter import exporter as pnml_exporter | |
pnml_exporter.apply(net, initial_marking, "createdPetriNet1.pnml", final_marking=final_marking) | |
from pm4py.visualization.petri_net import visualizer as pn_visualizer | |
gviz = pn_visualizer.apply(net, initial_marking, final_marking) | |
from pm4py.visualization.petri_net import visualizer as pn_visualizer | |
parameters = {pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg"} | |
gviz = pn_visualizer.apply(net, initial_marking, final_marking, parameters=parameters) | |
from pm4py.visualization.petri_net import visualizer as pn_visualizer | |
parameters = {pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg"} | |
gviz = pn_visualizer.apply(net, initial_marking, final_marking, parameters=parameters) | |
pn_visualizer.save(gviz, "alpha.svg") | |
os.remove("createdPetriNet1.pnml") | |
os.remove("alpha.svg") | |
def test_56(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
process_tree = inductive_miner.apply(log) | |
net, initial_marking, final_marking = process_tree_converter.apply(process_tree) | |
from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments | |
alignments = alignments.apply_log(log, net, initial_marking, final_marking) | |
def test_57(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
for trace in log: | |
for event in trace: | |
event["customClassifier"] = event["concept:name"] + event["concept:name"] | |
from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments | |
# define the activity key in the parameters | |
parameters = {inductive_miner.Parameters.ACTIVITY_KEY: "customClassifier", | |
alignments.Variants.VERSION_STATE_EQUATION_A_STAR.value.Parameters.ACTIVITY_KEY: "customClassifier"} | |
# calculate process model using the given classifier | |
process_tree = inductive_miner.apply(log) | |
net, initial_marking, final_marking = process_tree_converter.apply(process_tree) | |
alignments = alignments.apply_log(log, net, initial_marking, final_marking, parameters=parameters) | |
from pm4py.algo.evaluation.replay_fitness import algorithm as replay_fitness | |
log_fitness = replay_fitness.evaluate(alignments, variant=replay_fitness.Variants.ALIGNMENT_BASED) | |
def test_58(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
process_tree = inductive_miner.apply(log) | |
net, initial_marking, final_marking = process_tree_converter.apply(process_tree) | |
from pm4py.algo.conformance.alignments.petri_net import algorithm as alignments | |
model_cost_function = dict() | |
sync_cost_function = dict() | |
for t in net.transitions: | |
# if the label is not None, we have a visible transition | |
if t.label is not None: | |
# associate cost 1000 to each move-on-model associated to visible transitions | |
model_cost_function[t] = 1000 | |
# associate cost 0 to each move-on-log | |
sync_cost_function[t] = 0 | |
else: | |
# associate cost 1 to each move-on-model associated to hidden transitions | |
model_cost_function[t] = 1 | |
parameters = {} | |
parameters[ | |
alignments.Variants.VERSION_STATE_EQUATION_A_STAR.value.Parameters.PARAM_MODEL_COST_FUNCTION] = model_cost_function | |
parameters[ | |
alignments.Variants.VERSION_STATE_EQUATION_A_STAR.value.Parameters.PARAM_SYNC_COST_FUNCTION] = sync_cost_function | |
alignments = alignments.apply_log(log, net, initial_marking, final_marking, parameters=parameters) | |
def test_59(self): | |
from pm4py.algo.simulation.tree_generator import algorithm as tree_gen | |
parameters = {} | |
tree = tree_gen.apply(parameters=parameters) | |
from pm4py.objects.process_tree import semantics | |
log = semantics.generate_log(tree, no_traces=100) | |
from pm4py.objects.conversion.process_tree import converter as pt_converter | |
net, im, fm = pt_converter.apply(tree) | |
from pm4py.visualization.process_tree import visualizer as pt_visualizer | |
gviz = pt_visualizer.apply(tree, parameters={pt_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "png"}) | |
def test_60(self): | |
if importlib.util.find_spec("sklearn"): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "roadtraffic50traces.xes")) | |
from pm4py.algo.transformation.log_to_features.variants import trace_based | |
str_trace_attributes = [] | |
str_event_attributes = ["concept:name"] | |
num_trace_attributes = [] | |
num_event_attributes = ["amount"] | |
data, feature_names = trace_based.apply(log) | |
data, feature_names = trace_based.apply(log, parameters={"str_tr_attr": str_trace_attributes, "str_ev_attr": str_event_attributes, "num_tr_attr": num_trace_attributes, "num_ev_attr": num_event_attributes}) | |
from pm4py.objects.log.util import get_class_representation | |
target, classes = get_class_representation.get_class_representation_by_str_ev_attr_value_value(log, | |
"concept:name") | |
from pm4py.util import ml_utils | |
clf = ml_utils.DecisionTreeClassifier() | |
clf.fit(data, target) | |
from pm4py.visualization.decisiontree import visualizer as dectree_visualizer | |
gviz = dectree_visualizer.apply(clf, feature_names, classes) | |
def test_61(self): | |
if importlib.util.find_spec("sklearn"): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "roadtraffic50traces.xes")) | |
from pm4py.algo.transformation.log_to_features.variants import trace_based | |
str_trace_attributes = [] | |
str_event_attributes = ["concept:name"] | |
num_trace_attributes = [] | |
num_event_attributes = ["amount"] | |
data, feature_names = trace_based.apply(log) | |
data, feature_names = trace_based.apply(log, parameters={"str_tr_attr": str_trace_attributes, "str_ev_attr": str_event_attributes, "num_tr_attr": num_trace_attributes, "num_ev_attr": num_event_attributes}) | |
from pm4py.objects.log.util import get_class_representation | |
target, classes = get_class_representation.get_class_representation_by_trace_duration(log, 2 * 8640000) | |
from pm4py.util import ml_utils | |
clf = ml_utils.DecisionTreeClassifier() | |
clf.fit(data, target) | |
from pm4py.visualization.decisiontree import visualizer as dectree_visualizer | |
gviz = dectree_visualizer.apply(clf, feature_names, classes) | |
def test_62(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
xes_importer.Variants.ITERPARSE.value.Parameters.TIMESTAMP_SORT | |
xes_importer.Variants.ITERPARSE.value.Parameters.TIMESTAMP_KEY | |
xes_importer.Variants.ITERPARSE.value.Parameters.REVERSE_SORT | |
xes_importer.Variants.ITERPARSE.value.Parameters.MAX_TRACES | |
def test_63(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
xes_importer.Variants.LINE_BY_LINE.value.Parameters.TIMESTAMP_SORT | |
xes_importer.Variants.LINE_BY_LINE.value.Parameters.TIMESTAMP_KEY | |
xes_importer.Variants.LINE_BY_LINE.value.Parameters.REVERSE_SORT | |
xes_importer.Variants.LINE_BY_LINE.value.Parameters.MAX_TRACES | |
xes_importer.Variants.LINE_BY_LINE.value.Parameters.MAX_BYTES | |
def test_64(self): | |
from pm4py.objects.conversion.log import converter | |
converter.Variants.TO_EVENT_LOG.value.Parameters.STREAM_POST_PROCESSING | |
converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ATTRIBUTE_PREFIX | |
converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY | |
converter.Variants.TO_EVENT_LOG.value.Parameters.DEEP_COPY | |
converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY | |
def test_65(self): | |
from pm4py.objects.conversion.log import converter | |
converter.Variants.TO_EVENT_STREAM.value.Parameters.STREAM_POST_PROCESSING | |
converter.Variants.TO_EVENT_STREAM.value.Parameters.CASE_ATTRIBUTE_PREFIX | |
converter.Variants.TO_EVENT_STREAM.value.Parameters.DEEP_COPY | |
def test_66(self): | |
from pm4py.objects.conversion.log import converter | |
converter.Variants.TO_EVENT_STREAM.value.Parameters.CASE_ATTRIBUTE_PREFIX | |
converter.Variants.TO_EVENT_STREAM.value.Parameters.DEEP_COPY | |
def test_67(self): | |
from pm4py.objects.log.exporter.xes import exporter as xes_exporter | |
xes_exporter.Variants.ETREE.value.Parameters.COMPRESS | |
def test_tbr_diagn_1(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) | |
from pm4py.algo.filtering.log.variants import variants_filter | |
filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
process_tree = inductive_miner.apply(log) | |
net, initial_marking, final_marking = process_tree_converter.apply(process_tree) | |
from pm4py.algo.conformance.tokenreplay import algorithm as token_based_replay | |
parameters_tbr = {token_based_replay.Variants.TOKEN_REPLAY.value.Parameters.DISABLE_VARIANTS: True, | |
token_based_replay.Variants.TOKEN_REPLAY.value.Parameters.ENABLE_PLTR_FITNESS: True} | |
replayed_traces, place_fitness, trans_fitness, unwanted_activities = token_based_replay.apply(log, net, | |
initial_marking, | |
final_marking, | |
parameters=parameters_tbr) | |
from pm4py.algo.conformance.tokenreplay.diagnostics import duration_diagnostics | |
trans_diagnostics = duration_diagnostics.diagnose_from_trans_fitness(log, trans_fitness) | |
for trans in trans_diagnostics: | |
#print(trans, trans_diagnostics[trans]) | |
pass | |
from pm4py.algo.conformance.tokenreplay.diagnostics import duration_diagnostics | |
act_diagnostics = duration_diagnostics.diagnose_from_notexisting_activities(log, unwanted_activities) | |
for act in act_diagnostics: | |
#print(act, act_diagnostics[act]) | |
pass | |
def test_tbr_diagn_2(self): | |
if importlib.util.find_spec("sklearn"): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) | |
from pm4py.algo.filtering.log.variants import variants_filter | |
filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
process_tree = inductive_miner.apply(log) | |
net, initial_marking, final_marking = process_tree_converter.apply(process_tree) | |
# build decision trees | |
string_attributes = ["org:group"] | |
numeric_attributes = [] | |
parameters = {"string_attributes": string_attributes, "numeric_attributes": numeric_attributes} | |
from pm4py.algo.conformance.tokenreplay import algorithm as token_based_replay | |
parameters_tbr = {token_based_replay.Variants.TOKEN_REPLAY.value.Parameters.DISABLE_VARIANTS: True, | |
token_based_replay.Variants.TOKEN_REPLAY.value.Parameters.ENABLE_PLTR_FITNESS: True} | |
replayed_traces, place_fitness, trans_fitness, unwanted_activities = token_based_replay.apply(log, net, | |
initial_marking, | |
final_marking, | |
parameters=parameters_tbr) | |
from pm4py.algo.conformance.tokenreplay.diagnostics import root_cause_analysis | |
trans_root_cause = root_cause_analysis.diagnose_from_trans_fitness(log, trans_fitness, parameters=parameters) | |
from pm4py.visualization.decisiontree import visualizer as dt_vis | |
for trans in trans_root_cause: | |
clf = trans_root_cause[trans]["clf"] | |
feature_names = trans_root_cause[trans]["feature_names"] | |
classes = trans_root_cause[trans]["classes"] | |
# visualization could be called | |
gviz = dt_vis.apply(clf, feature_names, classes) | |
break | |
from pm4py.algo.conformance.tokenreplay.diagnostics import root_cause_analysis | |
act_root_cause = root_cause_analysis.diagnose_from_notexisting_activities(log, unwanted_activities, | |
parameters=parameters) | |
from pm4py.visualization.decisiontree import visualizer as dt_vis | |
for act in act_root_cause: | |
clf = act_root_cause[act]["clf"] | |
feature_names = act_root_cause[act]["feature_names"] | |
classes = act_root_cause[act]["classes"] | |
# visualization could be called | |
gviz = dt_vis.apply(clf, feature_names, classes) | |
break | |
def test_max_decomp(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
net, im, fm = alpha_miner.apply(log) | |
from pm4py.objects.petri_net.utils.decomposition import decompose | |
list_nets = decompose(net, im, fm) | |
from pm4py.visualization.petri_net import visualizer | |
gviz = [] | |
for index, model in enumerate(list_nets): | |
subnet, s_im, s_fm = model | |
gviz.append(visualizer.apply(subnet, s_im, s_fm, parameters={visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: "png"})) | |
break | |
def test_reach_graph(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
net, im, fm = alpha_miner.apply(log) | |
from pm4py.objects.petri_net.utils import reachability_graph | |
ts = reachability_graph.construct_reachability_graph(net, im) | |
from pm4py.visualization.transition_system import visualizer as ts_visualizer | |
gviz = ts_visualizer.apply(ts, parameters={ts_visualizer.Variants.VIEW_BASED.value.Parameters.FORMAT: "svg"}) | |
def test_decomp(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
net, im, fm = alpha_miner.apply(log) | |
from pm4py.algo.conformance.alignments.decomposed import algorithm as decomp_alignments | |
conf = decomp_alignments.apply(log, net, im, fm, parameters={ | |
decomp_alignments.Variants.RECOMPOS_MAXIMAL.value.Parameters.PARAM_THRESHOLD_BORDER_AGREEMENT: 2}) | |
from pm4py.algo.evaluation.replay_fitness import algorithm as rp_fitness_evaluator | |
fitness = rp_fitness_evaluator.evaluate(conf, variant=rp_fitness_evaluator.Variants.ALIGNMENT_BASED) | |
def test_footprints(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
process_tree = inductive_miner.apply(log) | |
net, im, fm = process_tree_converter.apply(process_tree) | |
from pm4py.algo.discovery.footprints import algorithm as footprints_discovery | |
fp_log = footprints_discovery.apply(log, variant=footprints_discovery.Variants.ENTIRE_EVENT_LOG) | |
from pm4py.algo.discovery.footprints import algorithm as footprints_discovery | |
fp_trace_by_trace = footprints_discovery.apply(log, variant=footprints_discovery.Variants.TRACE_BY_TRACE) | |
fp_net = footprints_discovery.apply(net, im, fm) | |
from pm4py.visualization.footprints import visualizer as fp_visualizer | |
gviz = fp_visualizer.apply(fp_net, parameters={fp_visualizer.Variants.SINGLE.value.Parameters.FORMAT: "svg"}) | |
from pm4py.visualization.footprints import visualizer as fp_visualizer | |
gviz = fp_visualizer.apply(fp_log, fp_net, | |
parameters={fp_visualizer.Variants.COMPARISON.value.Parameters.FORMAT: "svg"}) | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
from copy import deepcopy | |
from pm4py.algo.filtering.log.variants import variants_filter | |
log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) | |
filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) | |
from pm4py.algo.discovery.inductive import algorithm as inductive_miner | |
process_tree = inductive_miner.apply(log) | |
net, im, fm = process_tree_converter.apply(process_tree) | |
from pm4py.algo.conformance.footprints import algorithm as footprints_conformance | |
conf_fp = footprints_conformance.apply(fp_trace_by_trace, fp_net) | |
def test_log_skeleton(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.log_skeleton import algorithm as lsk_discovery | |
skeleton = lsk_discovery.apply(log, parameters={ | |
lsk_discovery.Variants.CLASSIC.value.Parameters.NOISE_THRESHOLD: 0.0}) | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) | |
from copy import deepcopy | |
from pm4py.algo.filtering.log.variants import variants_filter | |
filtered_log = variants_filter.filter_log_variants_percentage(log, 0.2) | |
from pm4py.algo.conformance.log_skeleton import algorithm as lsk_conformance | |
conf_result = lsk_conformance.apply(log, skeleton) | |
from pm4py.algo.discovery.log_skeleton import algorithm as lsk_discovery | |
skeleton = lsk_discovery.apply(log, parameters={ | |
lsk_discovery.Variants.CLASSIC.value.Parameters.NOISE_THRESHOLD: 0.03}) | |
from pm4py.algo.conformance.log_skeleton import algorithm as lsk_conformance | |
conf_result = lsk_conformance.apply(log, skeleton) | |
def test_throughput_time(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.statistics.traces.generic.log import case_statistics | |
all_case_durations = case_statistics.get_all_case_durations(log, parameters={ | |
case_statistics.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
from pm4py.statistics.traces.generic.log import case_statistics | |
median_case_duration = case_statistics.get_median_case_duration(log, parameters={ | |
case_statistics.Parameters.TIMESTAMP_KEY: "time:timestamp" | |
}) | |
def test_case_arrival(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.statistics.traces.generic.log import case_arrival | |
case_arrival_ratio = case_arrival.get_case_arrival_avg(log, parameters={ | |
case_arrival.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
from pm4py.statistics.traces.generic.log import case_arrival | |
case_dispersion_ratio = case_arrival.get_case_dispersion_avg(log, parameters={ | |
case_arrival.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
def test_ps(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.performance_spectrum import algorithm as performance_spectrum | |
ps = performance_spectrum.apply(log, ["register request", "decide"], | |
parameters={performance_spectrum.Parameters.ACTIVITY_KEY: "concept:name", | |
performance_spectrum.Parameters.TIMESTAMP_KEY: "time:timestamp"}) | |
def test_business_hours(self): | |
from pm4py.util.business_hours import BusinessHours | |
from datetime import datetime | |
from pm4py.util.dt_parsing.variants import strpfromiso | |
from pm4py.util import constants | |
st = strpfromiso.fix_naivety(datetime.fromtimestamp(100000000)) | |
et = strpfromiso.fix_naivety(datetime.fromtimestamp(200000000)) | |
bh_object = BusinessHours(st, et) | |
worked_time = bh_object.get_seconds() | |
bh_object = BusinessHours(st, et, business_hour_slots=constants.DEFAULT_BUSINESS_HOUR_SLOTS) | |
worked_time = bh_object.get_seconds() | |
def test_cycle_waiting_time(self): | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
import os | |
log = xes_importer.apply(os.path.join("input_data", "receipt.xes")) | |
from pm4py.objects.log.util import interval_lifecycle | |
enriched_log = interval_lifecycle.assign_lead_cycle_time(log) | |
def test_distr_case_duration(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log_path = os.path.join("input_data", "receipt.xes") | |
log = xes_importer.apply(log_path) | |
from pm4py.util import constants | |
from pm4py.statistics.traces.generic.log import case_statistics | |
x, y = case_statistics.get_kde_caseduration(log, parameters={ | |
constants.PARAMETER_CONSTANT_TIMESTAMP_KEY: "time:timestamp"}) | |
if importlib.util.find_spec("matplotlib"): | |
from pm4py.visualization.graphs import visualizer as graphs_visualizer | |
gviz = graphs_visualizer.apply_plot(x, y, variant=graphs_visualizer.Variants.CASES) | |
gviz = graphs_visualizer.apply_semilogx(x, y, variant=graphs_visualizer.Variants.CASES) | |
def test_distr_num_attribute(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log_path = os.path.join("input_data", "roadtraffic100traces.xes") | |
log = xes_importer.apply(log_path) | |
from pm4py.algo.filtering.log.attributes import attributes_filter | |
x, y = attributes_filter.get_kde_numeric_attribute(log, "amount") | |
if importlib.util.find_spec("matplotlib"): | |
from pm4py.visualization.graphs import visualizer as graphs_visualizer | |
gviz = graphs_visualizer.apply_plot(x, y, variant=graphs_visualizer.Variants.ATTRIBUTES) | |
from pm4py.visualization.graphs import visualizer as graphs_visualizer | |
gviz = graphs_visualizer.apply_semilogx(x, y, variant=graphs_visualizer.Variants.ATTRIBUTES) | |
def test_evaluation(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
net, im, fm = alpha_miner.apply(log) | |
from pm4py.algo.evaluation.replay_fitness import algorithm as replay_fitness_evaluator | |
fitness = replay_fitness_evaluator.apply(log, net, im, fm, | |
variant=replay_fitness_evaluator.Variants.TOKEN_BASED) | |
from pm4py.algo.evaluation.replay_fitness import algorithm as replay_fitness_evaluator | |
fitness = replay_fitness_evaluator.apply(log, net, im, fm, | |
variant=replay_fitness_evaluator.Variants.ALIGNMENT_BASED) | |
from pm4py.algo.evaluation.precision import algorithm as precision_evaluator | |
prec = precision_evaluator.apply(log, net, im, fm, variant=precision_evaluator.Variants.ETCONFORMANCE_TOKEN) | |
from pm4py.algo.evaluation.precision import algorithm as precision_evaluator | |
prec = precision_evaluator.apply(log, net, im, fm, variant=precision_evaluator.Variants.ALIGN_ETCONFORMANCE) | |
from pm4py.algo.evaluation.generalization import algorithm as generalization_evaluator | |
gen = generalization_evaluator.apply(log, net, im, fm) | |
from pm4py.algo.evaluation.simplicity import algorithm as simplicity_evaluator | |
simp = simplicity_evaluator.apply(net) | |
def test_sna(self): | |
if importlib.util.find_spec("pyvis"): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.organizational_mining.sna import algorithm as sna | |
hw_values = sna.apply(log, variant=sna.Variants.HANDOVER_LOG) | |
from pm4py.visualization.sna import visualizer as sna_visualizer | |
gviz_hw_py = sna_visualizer.apply(hw_values, variant=sna_visualizer.Variants.PYVIS) | |
from pm4py.algo.organizational_mining.sna import algorithm as sna | |
sub_values = sna.apply(log, variant=sna.Variants.SUBCONTRACTING_LOG) | |
from pm4py.visualization.sna import visualizer as sna_visualizer | |
gviz_sub_py = sna_visualizer.apply(sub_values, variant=sna_visualizer.Variants.PYVIS) | |
from pm4py.algo.organizational_mining.sna import algorithm as sna | |
wt_values = sna.apply(log, variant=sna.Variants.WORKING_TOGETHER_LOG) | |
from pm4py.visualization.sna import visualizer as sna_visualizer | |
gviz_wt_py = sna_visualizer.apply(wt_values, variant=sna_visualizer.Variants.PYVIS) | |
from pm4py.algo.organizational_mining.sna import algorithm as sna | |
ja_values = sna.apply(log, variant=sna.Variants.JOINTACTIVITIES_LOG) | |
from pm4py.visualization.sna import visualizer as sna_visualizer | |
gviz_ja_py = sna_visualizer.apply(ja_values, variant=sna_visualizer.Variants.PYVIS) | |
from pm4py.algo.organizational_mining.roles import algorithm as roles_discovery | |
roles = roles_discovery.apply(log) | |
def test_playout(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
from pm4py.algo.discovery.alpha import algorithm as alpha_miner | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
net, im, fm = alpha_miner.apply(log) | |
from pm4py.algo.simulation.playout.petri_net import algorithm | |
simulated_log = algorithm.apply(net, im, variant=algorithm.Variants.BASIC_PLAYOUT, | |
parameters={algorithm.Variants.BASIC_PLAYOUT.value.Parameters.NO_TRACES: 50}) | |
from pm4py.algo.simulation.playout.petri_net import algorithm | |
simulated_log = algorithm.apply(net, im, variant=algorithm.Variants.EXTENSIVE, | |
parameters={algorithm.Variants.EXTENSIVE.value.Parameters.MAX_TRACE_LENGTH: 7}) | |
def test_ctmc(self): | |
import os | |
from pm4py.objects.log.importer.xes import importer as xes_importer | |
log = xes_importer.apply(os.path.join("input_data", "running-example.xes")) | |
from pm4py.algo.discovery.dfg import algorithm as dfg_discovery | |
dfg_perf = dfg_discovery.apply(log, variant=dfg_discovery.Variants.PERFORMANCE) | |
from pm4py.statistics.start_activities.log import get as start_activities | |
from pm4py.statistics.end_activities.log import get as end_activities | |
sa = start_activities.get_start_activities(log) | |
ea = end_activities.get_end_activities(log) | |
from pm4py.algo.filtering.log.variants import variants_filter | |
log = variants_filter.filter_log_variants_percentage(log, 0.2) | |
from pm4py.objects.stochastic_petri import ctmc | |
reach_graph, tang_reach_graph, stochastic_map, q_matrix = ctmc.get_tangible_reachability_and_q_matrix_from_dfg_performance( | |
dfg_perf, parameters={"start_activities": sa, "end_activities": ea}) | |
# pick the source state | |
state = [x for x in tang_reach_graph.states if x.name == "source1"][0] | |
# analyse the distribution over the states of the system starting from the source after 172800.0 seconds (2 days) | |
transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(tang_reach_graph, q_matrix, | |
state, | |
172800.0) | |
if __name__ == "__main__": | |
unittest.main() | |