def apply_variants(variants, parameters=None):
    """
    Apply the IMDF algorithm to a dictionary/list/set of variants obtaining a Petri net along with an initial and final marking

    Parameters
    -----------
    variants
        Dictionary/list/set of variants in the log
    parameters
        Parameters of the algorithm, including:
            pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY -> attribute of the log to use as activity name
            (default concept:name)

    Returns
    -----------
    net
        Petri net
    initial_marking
        Initial marking
    final_marking
        Final marking
    """
    if parameters is None:
        parameters = {}
    tree = apply_tree_variants(variants, parameters=parameters)
    net, initial_marking, final_marking = tree_to_petri.apply(tree)
    return net, initial_marking, final_marking
예제 #2
0
def apply(log, parameters):
    """
    Apply the IM_F algorithm to a log obtaining a Petri net along with an initial and final marking

    Parameters
    -----------
    log
        Log
    parameters
        Parameters of the algorithm, including:
            Parameters.ACTIVITY_KEY -> attribute of the log to use as activity name
            (default concept:name)

    Returns
    -----------
    net
        Petri net
    initial_marking
        Initial marking
    final_marking
        Final marking
    """
    if type(log) is pd.DataFrame:
        vars = variants_get.get_variants_count(log, parameters=parameters)
        return apply_variants(vars, parameters=parameters)
    else:
        log = converter.apply(log, parameters=parameters)
        net, initial_marking, final_marking = tree_to_petri.apply(
            apply_tree(log, parameters))
        return net, initial_marking, final_marking
예제 #3
0
def apply_variants(variants, parameters=None):
    """
    Apply the IM_F algorithm to a dictionary of variants, obtaining a Petri net along with an initial and final marking

    Parameters
    -----------
    variants
        Variants
    parameters
        Parameters of the algorithm, including:
            Parameters.ACTIVITY_KEY -> attribute of the log to use as activity name
            (default concept:name)

    Returns
    -----------
    net
        Petri net
    initial_marking
        Initial marking
    final_marking
        Final marking
    """
    net, im, fm = tree_to_petri.apply(
        apply_tree_variants(variants, parameters=parameters))
    return net, im, fm
예제 #4
0
def alignment_default_on_pt(tree, log):
    net, initial_marking, final_marking = pt_to_net.apply(tree)
    parameters = align_utils.alignment_parameters(net)
    parameters['ret_tuple_as_trans_desc'] = True
    alignments = align_factory.apply_log(log, net, initial_marking,
                                         final_marking, parameters)
    return alignments
예제 #5
0
def apply_dfg(dfg, parameters, activities=None, contains_empty_traces=False):
    """
    Apply the IMDF algorithm to a DFG graph obtaining a Petri net along with an initial and final marking

    Parameters
    -----------
    dfg
        Directly-Follows graph
    parameters
        Parameters of the algorithm, including:
            pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY -> attribute of the log to use as activity name
            (default concept:name)
    activities
        Activities of the process (default None)
    contains_empty_traces
        Boolean value that is True if the event log from which the DFG has been extracted contains empty traces

    Returns
    -----------
    net
        Petri net
    initial_marking
        Initial marking
    final_marking
        Final marking
    """
    tree = apply_tree_dfg(dfg, parameters, activities=activities, contains_empty_traces=contains_empty_traces)
    net, initial_marking, final_marking = tree_to_petri.apply(tree)

    return net, initial_marking, final_marking
예제 #6
0
def apply(log, parameters=None):
    """
    Apply the IMDF algorithm to a log obtaining a Petri net along with an initial and final marking

    Parameters
    -----------
    log
        Log
    parameters
        Parameters of the algorithm, including:
            pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY -> attribute of the log to use as activity name
            (default concept:name)

    Returns
    -----------
    net
        Petri net
    initial_marking
        Initial marking
    final_marking
        Final marking
    """
    if parameters is None:
        parameters = {}
    if pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY not in parameters:
        parameters[pmutil.constants.
                   PARAMETER_CONSTANT_ACTIVITY_KEY] = xes_util.DEFAULT_NAME_KEY
    if pmutil.constants.PARAMETER_CONSTANT_TIMESTAMP_KEY not in parameters:
        parameters[
            pmutil.constants.
            PARAMETER_CONSTANT_TIMESTAMP_KEY] = xes_util.DEFAULT_TIMESTAMP_KEY
    if pmutil.constants.PARAMETER_CONSTANT_CASEID_KEY not in parameters:
        parameters[
            pmutil.constants.
            PARAMETER_CONSTANT_CASEID_KEY] = pmutil.constants.CASE_ATTRIBUTE_GLUE
    if type(log) is pd.DataFrame:
        return apply_variants(variants_get.get_variants_set(
            log, parameters=parameters),
                              parameters=parameters)
    else:
        log = log_conversion.apply(log, parameters,
                                   log_conversion.TO_EVENT_LOG)
        tree = apply_tree(log, parameters=parameters)
        net, initial_marking, final_marking = tree_to_petri.apply(tree)
        return net, initial_marking, final_marking
def run_inductive_and_evaluate(log_for_pd, log_for_eval):
    '''
    Given 2 event logs, it runs the inductive miner and evaluate the result of the process models
    :param log_for_pd: logs that will be used to discover the process models (e.g., might be truncated)
    :param log_for_eval: logs that will be replayed on top of the discovered process model (e.g., will not be truncated = ground truth)
    :return: The evaluation of the process model in a dictionary.
    '''

    # Discover petri net from log
    tree = inductive_miner.apply_tree(log_for_pd)
    net, initial_marking, final_marking = pt_conv_factory.apply(tree, variant=pt_conv_factory.TO_PETRI_NET)

    # Replay the log on top of the discovered process model
    inductive_evaluation_result = evaluation_factory.apply(log_for_eval, net, initial_marking, final_marking)
    inductive_evaluation_result.update(inductive_evaluation_result['fitness'])
    inductive_evaluation_result['discovered_pt'] = str(tree)
    del inductive_evaluation_result['fitness']
    return inductive_evaluation_result
def export_file(orig_tree, activity_set):
    """
    Export petri net to pnml file
    :param orig_tree: string of the tree from the main algorithm
    :param activity_set: set of all the activities
    :return: pnml file
    """
    string_tree = tree_for_eval(orig_tree, activity_set)
    tree = pt_util.parse(string_tree)
    net, initial_marking, final_marking = tree_to_petri.apply(tree)
    file_name = config.data_file[:config.data_file.find('.')] + '_' + str(
        config.silhouette_threshold) + '.pnml'
    output_file = os.path.join(config.base_directory, config.data_dir,
                               file_name)
    petri_exporter.export_net(net,
                              initial_marking,
                              output_file,
                              final_marking=final_marking)
예제 #9
0
def apply(log, parameters=None):
    """
    Apply the IMDF algorithm to a log obtaining a Petri net along with an initial and final marking

    Parameters
    -----------
    log
        Log
    parameters
        Parameters of the algorithm, including:
            pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY -> attribute of the log to use as activity name
            (default concept:name)

    Returns
    -----------
    net
        Petri net
    initial_marking
        Initial marking
    final_marking
        Final marking
    """
    if parameters is None:
        parameters = {}
    if pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY not in parameters:
        parameters[pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = xes_util.DEFAULT_NAME_KEY
    if pmutil.constants.PARAMETER_CONSTANT_TIMESTAMP_KEY not in parameters:
        parameters[pmutil.constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = xes_util.DEFAULT_TIMESTAMP_KEY
    if pmutil.constants.PARAMETER_CONSTANT_CASEID_KEY not in parameters:
        parameters[pmutil.constants.PARAMETER_CONSTANT_CASEID_KEY] = pmutil.constants.CASE_ATTRIBUTE_GLUE
    if isinstance(log, pandas.core.frame.DataFrame):
        dfg = df_statistics.get_dfg_graph(log, case_id_glue=parameters[pmutil.constants.PARAMETER_CONSTANT_CASEID_KEY],
                                          activity_key=parameters[pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY],
                                          timestamp_key=parameters[pmutil.constants.PARAMETER_CONSTANT_TIMESTAMP_KEY])
        start_activities = pd_start_act_stats.get_start_activities(log, parameters=parameters)
        end_activities = pd_end_act_stats.get_end_activities(log, parameters=parameters)
        activities = pd_attributes_stats.get_attribute_values(log, parameters[pmutil.constants.PARAMETER_CONSTANT_ACTIVITY_KEY], parameters=parameters)
        return apply_dfg(dfg, activities=activities, start_activities=start_activities, end_activities=end_activities, parameters=parameters)
    log = log_conversion.apply(log, parameters, log_conversion.TO_EVENT_LOG)
    tree = apply_tree(log, parameters=parameters)
    net, initial_marking, final_marking = tree_to_petri.apply(tree)
    return net, initial_marking, final_marking
예제 #10
0
def apply_infrequent_petrinet(tree):
    return tree_to_petri.apply(tree)
예제 #11
0
def draw_normal_pn4pt(tree, parameters=None):
    net, initial_marking, final_marking = pt_to_net.apply(tree, parameters)
    gviz = pn_vis_factory.apply(net)
    pn_vis_factory.view(gviz)
예제 #12
0
from pm4py.visualization.process_tree import factory as pt_viz
from pm4py.algo.simulation.tree_generator import factory as pt_gen
from pm4py.objects.process_tree import util as pt_util
from pm4py.objects.conversion.process_tree import factory as pt_conv
from pm4py.visualization.petrinet import factory as pn_viz
from pm4py.objects.petri import utils as pn_util
import time


if __name__ == "__main__":
    pt = pt_gen.apply()
    pt_viz.view(pt_viz.apply(pt, parameters={"format": "svg"}))
    time.sleep(1)
    pn, im, fm = pt_conv.apply(pt)
    pn_viz.view(pn_viz.apply(pn, parameters={'format': 'svg'}))
    time.sleep(1)
    pt = pt_util.fold(pt)
    pt_viz.view(pt_viz.apply(pt, parameters={"format": "svg"}))
예제 #13
0
from pm4py.algo.simulation.tree_generator import factory as pt_gen
from pm4py.objects.conversion.process_tree import factory as pt_conv
from pm4py.visualization.petrinet import factory as pn_viz
from pm4py.visualization.process_tree import factory as pt_viz
from pm4py.objects.process_tree import util as pt_util
from pm4py.objects.petri import utils as pn_util
import time
from pm4py.objects.petri.exporter import factory as pn_exp

if __name__ == '__main__':
    pt = pt_gen.apply()
    gviz = pt_viz.apply(pt, parameters={'format': 'svg'})
    pt_viz.view(gviz)
    time.sleep(1)
    pt = pt_util.fold(pt)
    gviz = pt_viz.apply(pt, parameters={'format': 'svg'})
    pt_viz.view(gviz)
    time.sleep(1)
    pn, ini, fin = pt_conv.apply(pt)
    gviz = pn_viz.apply(pn, ini, fin, parameters={"format": "svg"})
    pn_viz.view(gviz)
    time.sleep(1)
    pn_exp.apply(pn,
                 ini,
                 'C:/Users/zelst/Desktop/translation_test.pnml',
                 final_marking=fin)