def test_alpha_miner_log(self):
     log = xes_importer.apply(
         os.path.join("input_data", "running-example.xes"))
     from pm4py.algo.discovery.alpha import factory as alpha_miner
     net1, im1, fm1 = alpha_miner.apply(
         log, variant=alpha_miner.ALPHA_VERSION_CLASSIC)
     net2, im2, fm2 = alpha_miner.apply(
         log, variant=alpha_miner.ALPHA_VERSION_PLUS)
     from pm4py.algo.discovery.dfg import factory as dfg_discovery
     dfg = dfg_discovery.apply(log)
     net3, im3, fm3 = alpha_miner.apply_dfg(
         dfg, variant=alpha_miner.ALPHA_VERSION_CLASSIC)
Exemple #2
0
def import_xes_data(filename):
    if not os.path.abspath(filename):
        # 修改日志文件路径
        file_path = global_util.get_full_path_input_file(filename)
    else:
        file_path = filename
        filename = os.path.basename(filename)

    # 导入日志文件名
    parameters = {"timestamp_sort": True}
    log = importer.apply(file_path, variant="nonstandard", parameters=parameters)

    # 矿工应用日志文件
    net, initial_marking, final_marking = alpha_miner.apply(log)

    # 可视化界面应用分析结果
    gviz = visualizer.apply(net, initial_marking, final_marking)

    # 生成输出文件名
    file, _ = os.path.splitext(filename)
    output_full_name = "output_" + file + ".png"
    # 生成输出文件全路径
    output_file = global_util.get_full_path_output_file(output_full_name)

    # 保存文件
    visualizer.save(gviz, output_file)
    # 返回输出文件名
    return output_full_name
 def test_tokenreplay(self):
     log = xes_importer.apply(
         os.path.join("input_data", "running-example.xes"))
     from pm4py.algo.discovery.alpha import factory as alpha_miner
     net, im, fm = alpha_miner.apply(log)
     from pm4py.algo.conformance.tokenreplay import factory as token_replay
     replayed_traces = token_replay.apply(log,
                                          net,
                                          im,
                                          fm,
                                          variant="token_replay")
     replayed_traces = token_replay.apply(log,
                                          net,
                                          im,
                                          fm,
                                          variant="backwards")
     from pm4py.evaluation.replay_fitness import factory as rp_fitness_evaluator
     fitness = rp_fitness_evaluator.apply(
         log, net, im, fm, variant=rp_fitness_evaluator.TOKEN_BASED)
     evaluation = rp_fitness_evaluator.evaluate(
         replayed_traces, variant=rp_fitness_evaluator.TOKEN_BASED)
     from pm4py.evaluation.precision import factory as precision_evaluator
     precision = precision_evaluator.apply(
         log, net, im, fm, variant=precision_evaluator.ETCONFORMANCE_TOKEN)
     from pm4py.evaluation.generalization import factory as generalization_evaluation
     generalization = generalization_evaluation.apply(
         log,
         net,
         im,
         fm,
         variant=generalization_evaluation.GENERALIZATION_TOKEN)
 def test_alpha_miner_dataframe(self):
     from pm4py.objects.log.adapters.pandas import csv_import_adapter
     df = csv_import_adapter.import_dataframe_from_path(
         os.path.join("input_data", "running-example.csv"))
     from pm4py.algo.discovery.alpha import factory as alpha_miner
     net, im, fm = alpha_miner.apply(
         df, variant=alpha_miner.ALPHA_VERSION_CLASSIC)
Exemple #5
0
def import_xes_data(filename):
    if not os.path.abspath(filename):

        file_path = global_util.get_full_path_input_file(filename)
    else:
        file_path = filename
        filename = os.path.basename(filename)

    parameters = {"timestamp_sort": True}
    log = importer.apply(file_path,
                         variant="nonstandard",
                         parameters=parameters)
    print(log)

    net, initial_marking, final_marking = alpha_miner.apply(log)

    gviz = visualizer.apply(net, initial_marking, final_marking)

    file, _ = os.path.splitext(filename)
    output_full_name = "output_" + file + ".png"

    output_file = global_util.get_full_path_output_file(output_full_name)

    visualizer.save(gviz, output_file)

    return output_full_name
 def test_playout(self):
     log = xes_importer.apply(
         os.path.join("input_data", "running-example.xes"))
     from pm4py.algo.discovery.alpha import factory as alpha_miner
     net, im, fm = alpha_miner.apply(log)
     from pm4py.simulation.playout import factory as simulator
     log2 = simulator.apply(net, im, fm)
 def test_tangiblereachabilitygraph_calc(self):
     # to avoid static method warnings in tests,
     # that by construction of the unittest package have to be expressed in such way
     self.dummy_variable = "dummy_value"
     input_log = os.path.join(INPUT_DATA_DIR, "running-example.xes")
     log = xes_importer.import_log(input_log)
     net, initial_marking, final_marking = alpha_miner.apply(log)
     s_map = stochastic_map.get_map_from_log_and_net(log, net, initial_marking, final_marking)
     reachab_graph = construct_reachability_graph(net, initial_marking)
     tang_reach_graph = tangible_reachability.get_tangible_reachability_from_reachability(reachab_graph,
                                                                                          s_map)
     viz = ts_vis_factory.apply(tang_reach_graph, parameters={"format": "svg", "show_labels": True})
     del viz
     # gets the Q matrix assuming exponential distributions
     q_matrix = ctmc.get_q_matrix_from_tangible_exponential(tang_reach_graph, s_map)
     # pick a state to start from
     states = sorted(list(tang_reach_graph.states), key=lambda x: x.name)
     state = states[0]
     transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(tang_reach_graph, q_matrix,
                                                                                        state, 86400)
     del transient_result
     transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(tang_reach_graph, q_matrix,
                                                                                        state, 864000)
     del transient_result
     steady_state = ctmc.steadystate_analysis_from_tangible_q_matrix(tang_reach_graph, q_matrix)
     del steady_state
Exemple #8
0
def import_xes_data(filename):
    if not os.path.abspath(filename):

        file_path = global_util.get_full_path_input_file(filename)
    else:
        file_path = filename
        filename = os.path.basename(filename)

    # import the name of log
    parameters = {"timestamp_sort": True}
    log = importer.apply(file_path,
                         variant="nonstandard",
                         parameters=parameters)
    print(log)

    # file of miner application log
    net, initial_marking, final_marking = alpha_miner.apply(log)

    # Visual interface application analysis results
    gviz = visualizer.apply(net, initial_marking, final_marking)

    # Generate output file name
    file, _ = os.path.splitext(filename)
    output_full_name = "output_" + file + ".png"
    # Generate the full path of the output file
    output_file = global_util.get_full_path_output_file(output_full_name)

    # save document
    visualizer.save(gviz, output_file)
    # Returns the output file name
    return output_full_name
Exemple #9
0
def bot_alpha_miner(chat_id):
    log = get_current_log(chat_id)
    net, initial_marking, final_marking = alpha_miner.apply(log)
    gviz = vis_factory.apply(net, initial_marking, final_marking)
    new_file, filename = tempfile.mkstemp(suffix="png")
    vis_factory.save(gviz, filename)
    return filename
Exemple #10
0
def import_xes_data(filename):
    if not os.path.abspath(filename):
        # modify the path of file
        file_path = global_util.get_full_path_input_file(filename)
    else:
        file_path = filename
        filename = os.path.basename(filename)

    # import the name of log
    parameters = {"timestamp_sort": True}
    log = importer.apply(file_path,
                         variant="nonstandard",
                         parameters=parameters)

    # apply miner
    net, initial_marking, final_marking = alpha_miner.apply(log)

    # apply visualizer
    gviz = visualizer.apply(net, initial_marking, final_marking)

    # generate the name of the file
    file, _ = os.path.splitext(filename)
    output_full_name = "output_" + file + ".png"
    # generate the path of all generated files
    output_file = global_util.get_full_path_output_file(output_full_name)

    # save file
    visualizer.save(gviz, output_file)
    # return the name of the file
    return output_full_name
Exemple #11
0
    def mine(self, log: EventLog) -> Tuple[PetriNet, Marking, Marking]:
        params = {
            PARAMETER_CONSTANT_CASEID_KEY: log.case_id_attr,
            PARAMETER_CONSTANT_ACTIVITY_KEY: log.activity_attr
        }

        res_tpl = alpha_miner.apply(log, parameters=params)
        return res_tpl
def execute_script():
    log_path = os.path.join("..", "tests", "input_data", "running-example.xes")
    log = xes_import.apply(log_path)

    net, i_m, f_m = alpha_miner.apply(log)

    gviz = pn_vis_factory.apply(net, i_m, f_m, parameters={"format": "svg", "debug": True})
    pn_vis_factory.view(gviz)
Exemple #13
0
def Alphaminer(file):
    log = xes_importer.import_log(file)
    net, initial_marking, final_marking = alpha_miner.apply(log)
    gviz = vis_factory.apply(net, initial_marking, final_marking)
    location = "/mnt/c/Users/harim/Downloads/alphaminer.png"
    vis_factory.save(gviz, location)
    #vis_factory.view(gviz)
    return location
Exemple #14
0
def execute_script():
    log_path = os.path.join("..", "tests", "input_data", "running-example.xes")
    log = xes_importer.apply(log_path)
    # obtain Petri net through Alpha Miner
    net, initial_marking, final_marking = alpha_miner.apply(log)
    # obtain stochastic information for transitions in the model
    s_map = stochastic_map.get_map_from_log_and_net(
        log,
        net,
        initial_marking,
        final_marking,
        force_distribution="EXPONENTIAL")
    # export the current stochastic Petri net
    petri_exporter.export_net(net,
                              initial_marking,
                              "example.pnml",
                              final_marking=final_marking,
                              stochastic_map=s_map)
    # re-import the current stochastic Petri net from file
    net, initial_marking, final_marking, s_map = petri_importer.import_net(
        "example.pnml", return_stochastic_information=True)
    # remove temporary file
    os.remove("example.pnml")
    # gets the reachability graph from the Petri net
    reachab_graph = construct_reachability_graph(net, initial_marking)
    # get the tangible reachability graph from the reachability graph and the stochastic map
    tang_reach_graph = tangible_reachability.get_tangible_reachability_from_reachability(
        reachab_graph, s_map)
    # visualize the tangible reachability graph on the screen
    viz = ts_vis_factory.apply(tang_reach_graph,
                               parameters={
                                   "format": "svg",
                                   "show_labels": True,
                                   "show_names": True
                               })
    ts_vis_factory.view(viz)
    # gets the Q matrix assuming exponential distributions
    q_matrix = ctmc.get_q_matrix_from_tangible_exponential(
        tang_reach_graph, s_map)
    # pick a state to start from
    states = sorted(list(tang_reach_graph.states), key=lambda x: x.name)
    state = states[0]
    print("\n\nstarting from state = ", state.name)
    # do transient analysis after 1 day
    transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(
        tang_reach_graph, q_matrix, state, 86400)
    print("\nprobability for each state after 1 day = ", transient_result)
    # do transient analysis after 10 days
    transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(
        tang_reach_graph, q_matrix, state, 864000)
    print("\nprobability for each state after 10 days = ", transient_result)
    # do transient analysis after 100 days
    transient_result = ctmc.transient_analysis_from_tangible_q_matrix_and_single_state(
        tang_reach_graph, q_matrix, state, 8640000)
    print("\nprobability for each state after 100 days = ", transient_result)
    steady_state = ctmc.steadystate_analysis_from_tangible_q_matrix(
        tang_reach_graph, q_matrix)
    print("\nsteady state = ", steady_state)
 def test_evaluation(self):
     log = xes_importer.apply(
         os.path.join("input_data", "running-example.xes"))
     from pm4py.algo.discovery.alpha import factory as alpha_miner
     net, im, fm = alpha_miner.apply(log)
     from pm4py.evaluation.simplicity import factory as simplicity
     simp = simplicity.apply(net)
     from pm4py.evaluation import factory as evaluation_method
     eval = evaluation_method.apply(log, net, im, fm)
Exemple #16
0
def generate_alpha_net(xes_log):
    try:
        alpha_net, initial_marking, final_marking = alpha_miner.apply(xes_log)
        return {
            'alpha_net': alpha_net,
            'initial_marking': initial_marking,
            'final_marking': final_marking
        }
    except AttributeError:
        print("Please check input values")
 def test_decomp_alignment(self):
     log = xes_importer.apply(
         os.path.join("input_data", "running-example.xes"))
     from pm4py.algo.discovery.alpha import factory as alpha_miner
     net, im, fm = alpha_miner.apply(log)
     from pm4py.algo.conformance.decomp_alignments import factory as decomp_align
     aligned_traces = decomp_align.apply(log,
                                         net,
                                         im,
                                         fm,
                                         variant="recompos_maximal")
Exemple #18
0
 def test_alphaminer_df(self):
     log = csv_import_adapter.import_dataframe_from_path(
         os.path.join("input_data", "running-example.csv"))
     net, im, fm = alpha_miner.apply(log)
     aligned_traces_tr = tr_factory.apply(log, net, im, fm)
     aligned_traces_alignments = align_factory.apply(log, net, im, fm)
     evaluation = eval_factory.apply(log, net, im, fm)
     fitness = rp_fit_factory.apply(log, net, im, fm)
     precision = precision_factory.apply(log, net, im, fm)
     generalization = generalization_factory.apply(log, net, im, fm)
     simplicity = simplicity_factory.apply(net)
Exemple #19
0
def run_alpha(log, label, activity_key, variant="classic"):
    from pm4py.algo.discovery.alpha import factory as alpha_miner

    miner_params = {
        PARAMETER_CONSTANT_TIMESTAMP_KEY: "time",
        PARAMETER_CONSTANT_ACTIVITY_KEY: activity_key
    }

    return alpha_miner.apply(copy.deepcopy(log),
                             parameters=miner_params,
                             variant=variant)
Exemple #20
0
 def test_alphaminer_stream(self):
     stream = csv_importer.apply(
         os.path.join("input_data", "running-example.csv"))
     net, im, fm = alpha_miner.apply(stream)
     aligned_traces_tr = tr_factory.apply(stream, net, im, fm)
     aligned_traces_alignments = align_factory.apply(stream, net, im, fm)
     evaluation = eval_factory.apply(stream, net, im, fm)
     fitness = rp_fit_factory.apply(stream, net, im, fm)
     precision = precision_factory.apply(stream, net, im, fm)
     generalization = generalization_factory.apply(stream, net, im, fm)
     simplicity = simplicity_factory.apply(net)
 def test_docmeasures11(self):
     # to avoid static method warnings in tests,
     # that by construction of the unittest package have to be expressed in such way
     self.dummy_variable = "dummy_value"
     from pm4py.objects.log.importer.xes import factory as xes_importer
     log = xes_importer.import_log(os.path.join("input_data",
                                                "receipt.xes"))
     from pm4py.algo.discovery.alpha import factory as alpha_miner
     from pm4py.algo.discovery.inductive import factory as inductive_miner
     alpha_petri, alpha_initial_marking, alpha_final_marking = alpha_miner.apply(
         log)
     inductive_petri, inductive_initial_marking, inductive_final_marking = inductive_miner.apply(
         log)
     from pm4py.evaluation.replay_fitness import factory as replay_factory
     fitness_alpha = replay_factory.apply(log, alpha_petri,
                                          alpha_initial_marking,
                                          alpha_final_marking)
     fitness_inductive = replay_factory.apply(log, inductive_petri,
                                              inductive_initial_marking,
                                              inductive_final_marking)
     del fitness_alpha
     del fitness_inductive
     from pm4py.evaluation.precision import factory as precision_factory
     precision_alpha = precision_factory.apply(log, alpha_petri,
                                               alpha_initial_marking,
                                               alpha_final_marking)
     precision_inductive = precision_factory.apply(
         log, inductive_petri, inductive_initial_marking,
         inductive_final_marking)
     del precision_alpha
     del precision_inductive
     from pm4py.evaluation.generalization import factory as generalization_factory
     generalization_alpha = generalization_factory.apply(
         log, alpha_petri, alpha_initial_marking, alpha_final_marking)
     generalization_inductive = generalization_factory.apply(
         log, inductive_petri, inductive_initial_marking,
         inductive_final_marking)
     del generalization_alpha
     del generalization_inductive
     from pm4py.evaluation.simplicity import factory as simplicity_factory
     simplicity_alpha = simplicity_factory.apply(alpha_petri)
     simplicity_inductive = simplicity_factory.apply(inductive_petri)
     del simplicity_alpha
     del simplicity_inductive
     from pm4py.evaluation import factory as evaluation_factory
     alpha_evaluation_result = evaluation_factory.apply(
         log, alpha_petri, alpha_initial_marking, alpha_final_marking)
     inductive_evaluation_result = evaluation_factory.apply(
         log, inductive_petri, inductive_initial_marking,
         inductive_final_marking)
     del alpha_evaluation_result
     del inductive_evaluation_result
Exemple #22
0
    def obtainPetriNetThroughAlphaMiner(self, log_name):
        # to avoid static method warnings in tests,
        # that by construction of the unittest package have to be expressed in such way
        self.dummy_variable = "dummy_value"

        if ".xes" in log_name:
            trace_log = xes_importer.import_log(log_name)
        else:
            event_log = csv_importer.import_log(log_name)
            trace_log = log_transform.transform_event_log_to_trace_log(
                event_log)
        net, marking, fmarking = alpha_factory.apply(trace_log)
        return trace_log, net, marking, fmarking
 def test_classifiers1documentation(self):
     # to avoid static method warnings in tests,
     # that by construction of the unittest package have to be expressed in such way
     self.dummy_variable = "dummy_value"
     from pm4py.objects.log.importer.xes import factory as xes_importer
     log = xes_importer.import_log(os.path.join("input_data",
                                                "receipt.xes"))
     # print(log.classifiers)
     from pm4py.objects.log.util import insert_classifier
     log, activity_key = insert_classifier.insert_activity_classifier_attribute(
         log, "Activity classifier")
     # print(activity_key)
     from pm4py.algo.discovery.alpha import factory as alpha_miner
     parameters = {
         pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY: activity_key
     }
     net, initial_marking, final_marking = alpha_miner.apply(
         log, parameters=parameters)
     del net
     del initial_marking
     del final_marking
     from pm4py.objects.log.importer.xes import factory as xes_importer
     log = xes_importer.import_log(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 factory as alpha_miner
     parameters = {
         pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY:
         "customClassifier"
     }
     net, initial_marking, final_marking = alpha_miner.apply(
         log, parameters=parameters)
     del net
     del initial_marking
     del final_marking
Exemple #24
0
def SPAlphaMiner(context):
    args = context.args
    log = convert_df_pm_format(args.inputData)
    net, initial_marking, final_marking = alpha_miner.apply(log)
    gviz = pn_vis_factory.apply(net, initial_marking, final_marking)
    pn_vis_factory.save(gviz, os.path.join(args.outputData, "alpha-miner.png"))
    pnml_exporter.export_net(
        net,
        initial_marking,
        os.path.join(args.outputData, "petri_final.pnml"),
        final_marking=final_marking,
    )

    return args.outputData
    def obtainPetriNetThroughAlphaMiner(self, log_name):
        # to avoid static method warnings in tests,
        # that by construction of the unittest package have to be expressed in such way
        self.dummy_variable = "dummy_value"

        if ".xes" in log_name:
            log = xes_importer.import_log(log_name)
        else:
            event_log = csv_importer.import_event_stream(log_name)
            log = log_transform.transform_event_stream_to_event_log(event_log)
        net, marking, fmarking = alpha_factory.apply(log)
        soundness = check_soundness.check_petri_wfnet_and_soundness(net)
        del soundness

        return log, net, marking, fmarking
    def test_alphadoc1(self):
        # to avoid static method warnings in tests,
        # that by construction of the unittest package have to be expressed in such way
        self.dummy_variable = "dummy_value"
        from pm4py.objects.log.importer.xes import factory as xes_importer
        log = xes_importer.import_log(
            os.path.join("input_data", "running-example.xes"))

        from pm4py.algo.discovery.alpha import factory as alpha_miner
        net, initial_marking, final_marking = alpha_miner.apply(log)
        from pm4py.visualization.petrinet.common import visualize as pn_viz
        gviz = pn_viz.graphviz_visualization(net,
                                             initial_marking=initial_marking,
                                             final_marking=final_marking)
        del gviz
def make_enabledlog_alphaminer(log_file_path, output_file_name):
    '''
    Convert XES to XES++ based on alpha miner (event log with enabled activities)
    (for test)

    Parameters
    ----------
    log_file_path
        log's file path to be changed into XES++

    output_file_name
        output file (XES++)'s name

    '''

    log = xes_importer.import_log(log_file_path)
    net, initial_marking, final_marking = alpha_miner.apply(log)

    doc = ET.parse(log_file_path)
    root = doc.getroot()

    for glob in root.iter("global"):
        if glob.attrib["scope"] == "event":
            enabled = ET.SubElement(glob, "string")
            enabled.set("key", "enabled")
            enabled.set("value", "enabled")

    for trace in root.iter("trace"):
        m = ini.discover_initial_marking(net)
        for event in trace.iter("event"):
            for string in event.iter("string"):
                if string.attrib["key"] == "concept:name":
                    act = string.attrib["value"]  # act: current activity in the event log
                    break
            for trans in net.transitions:
                if act == trans.label:
                    t = trans
                    break
            en = semantics.enabled_transitions(net, m)
            enabled = ET.SubElement(event, "string")
            enabled.set("key", "enabled")
            enabled.set("value", en) #write on the XES file
            if m == final_marking:
                break
            m = semantics.execute(t, net, m)


    doc.write(output_file_name, encoding="utf-8", xml_declaration=True)
Exemple #28
0
    def show_log(self, log):
        # Miner application log file
        net, initial_marking, final_marking = alpha_miner.apply(log)

        # Visual interface application analysis results
        gviz = visualizer.apply(net, initial_marking, final_marking)

        file, _ = os.path.splitext(os.path.basename(self.fileName))
        output_full_name = "output_time_filtered_" + file + ".png"

        output_file = global_util.get_full_path_output_file(output_full_name)
        print(output_file)

        visualizer.save(gviz, output_file)

        return output_full_name
Exemple #29
0
def import_csv_file(filename):
    filename = os.path.basename(filename)

    file_path = global_util.get_full_path_input_file(filename)

    event_stream = csv_importer.import_event_stream(file_path)
    # dataframe = csv_import_adapter.import_dataframe_from_path(file_path, sep=",")

    log = conversion_factory.apply(
        event_stream,
        parameters={constants.PARAMETER_CONSTANT_TIMESTAMP_KEY: "日期和时间"})

    net, initial_marking, final_marking = alpha_miner.apply(log)

    gviz = visualizer.apply(net, initial_marking, final_marking)

    visualizer.view(gviz)
Exemple #30
0
    def test_rep_log_petri_fitness(self):
        # to avoid static method warnings in tests,
        # that by construction of the unittest package have to be expressed in such way
        self.dummy_variable = "dummy_value"

        log = xes_importer.import_log(
            os.path.join(INPUT_DATA_DIR, "running-example.xes"))
        pref_mat, var_mat, activities = prefix_matrix.get_prefix_variants_matrix(
            log)

        net, im, fm = alpha_miner.apply(log)

        net_matrix = project_net_on_matrix(net, activities)

        product_matrix = np.matmul(pref_mat, net_matrix)
        max_product_matrix = np.max(product_matrix)

        self.assertGreaterEqual(max_product_matrix, 0)