pm4py.algo.filtering.dfg.dfg_filtering module#

pm4py.algo.filtering.dfg.dfg_filtering.generate_nx_graph_from_dfg(dfg, start_activities, end_activities, activities_count)[source]#

Generate a NetworkX graph for reachability-checking purposes out of the DFG

Parameters:
  • dfg – DFG

  • start_activities – Start activities

  • end_activities – End activities

  • activities_count – Activities of the DFG along with their count

Returns:

  • G – NetworkX digraph

  • start_node – Identifier of the start node (connected to all the start activities)

  • end_node – Identifier of the end node (connected to all the end activities)

pm4py.algo.filtering.dfg.dfg_filtering.build_adjacency_structures(dfg, start_activities, end_activities)[source]#

Build forward (adj) and reverse (rev_adj) adjacency lists for the DFG, plus two synthetic nodes for the “start” and “end”. - start_node points to each node in start_activities. - each node in end_activities points to end_node.

Returns:

adj, rev_adj, start_node, end_node

pm4py.algo.filtering.dfg.dfg_filtering.bfs_reachable(start, adj)[source]#

Returns the set of nodes reachable from ‘start’ in the directed graph defined by adjacency list ‘adj’.

pm4py.algo.filtering.dfg.dfg_filtering.remove_unreachable_nodes(dfg, start_activities, end_activities, activities_count, adj, rev_adj, start_node, end_node)[source]#

Removes from the DFG (and related dictionaries) any activity/node that is not reachable from start_node or cannot reach end_node, based on the current adjacency structure ‘adj’ and ‘rev_adj’.

pm4py.algo.filtering.dfg.dfg_filtering.filter_dfg_on_activities_percentage(dfg0, start_activities0, end_activities0, activities_count0, percentage)[source]#

Filters a DFG (complete, and so connected) on the specified percentage of activities (but ensuring that every node is still reachable from the start and can reach the end).

Parameters:
  • dfg0 – (Complete, and so connected) DFG

  • start_activities0 – Start activities

  • end_activities0 – End activities

  • activities_count0 – Activities of the DFG along with their count

  • percentage – Percentage of activities

Returns:

  • dfg – (Filtered) DFG

  • start_activities – (Filtered) start activities

  • end_activities – (Filtered) end activities

  • activities_count – (Filtered) activities of the DFG along with their count

pm4py.algo.filtering.dfg.dfg_filtering.filter_dfg_on_paths_percentage(dfg0, start_activities0, end_activities0, activities_count0, percentage, keep_all_activities=False)[source]#

Filters a DFG (complete, and so connected) on the specified percentage of paths (but ensuring that every node is still reachable from the start and can reach the end).

Parameters:
  • dfg0 – (Complete, and so connected) DFG

  • start_activities0 – Start activities

  • end_activities0 – End activities

  • activities_count0 – Activities of the DFG along with their count

  • percentage – Percentage of paths

  • keep_all_activities – If True, keep all activities (only remove edges) and preserve connectivity; otherwise, only guarantee that the activities in the high-percentage edges remain connected.

Returns:

  • dfg – (Filtered) DFG

  • start_activities – (Filtered) start activities

  • end_activities – (Filtered) end activities

  • activities_count – (Filtered) activities of the DFG along with their count

pm4py.algo.filtering.dfg.dfg_filtering.filter_dfg_keep_connected(dfg0, start_activities0, end_activities0, activities_count0, threshold, keep_all_activities=False)[source]#

Filters a DFG (complete, and so connected) on the specified dependency threshold (similar to Heuristics Miner dependency), but ensuring every node is still reachable from the start and can reach the end.

Parameters:
  • dfg0 – (Complete, and so connected) DFG

  • start_activities0 – Start activities

  • end_activities0 – End activities

  • activities_count0 – Activities of the DFG along with their count

  • threshold – Dependency threshold as in the Heuristics Miner

  • keep_all_activities – If True, keep all activities (only remove edges that fall below threshold); otherwise, remove activities not connected by high-dependency edges.

Returns:

  • dfg – (Filtered) DFG

  • start_activities – (Filtered) start activities

  • end_activities – (Filtered) end activities

  • activities_count – (Filtered) activities of the DFG along with their count

pm4py.algo.filtering.dfg.dfg_filtering.filter_dfg_to_activity(dfg0, start_activities0, end_activities0, activities_count0, target_activity, parameters=None)[source]#

Filters the DFG, making “target_activity” the only possible end activity of the graph

Parameters:
  • dfg0 – Directly-follows graph

  • start_activities0 – Start activities

  • end_activities0 – End activities

  • activities_count0 – Activities count

  • target_activity – Target activity (only possible end activity after the filtering)

  • parameters – Parameters

Returns:

  • dfg – Filtered DFG

  • start_activities – Filtered start activities

  • end_activities – Filtered end activities

  • activities_count – Filtered activities count

pm4py.algo.filtering.dfg.dfg_filtering.filter_dfg_from_activity(dfg0, start_activities0, end_activities0, activities_count0, source_activity, parameters=None)[source]#

Filters the DFG, making “source_activity” the only possible source activity of the graph

Parameters:
  • dfg0 – Directly-follows graph

  • start_activities0 – Start activities

  • end_activities0 – End activities

  • activities_count0 – Activities count

  • source_activity – Source activity (only possible start activity after the filtering)

  • parameters – Parameters

Returns:

  • dfg – Filtered DFG

  • start_activities – Filtered start activities

  • end_activities – Filtered end activities

  • activities_count – Filtered activities count

pm4py.algo.filtering.dfg.dfg_filtering.filter_dfg_contain_activity(dfg0, start_activities0, end_activities0, activities_count0, activity, parameters=None)[source]#

Filters the DFG keeping only nodes that can reach / are reachable from activity

Parameters:
  • dfg0 – Directly-follows graph

  • start_activities0 – Start activities

  • end_activities0 – End activities

  • activities_count0 – Activities count

  • activity – Activity that should be reachable / should reach all the nodes of the filtered graph

  • parameters – Parameters

Returns:

  • dfg – Filtered DFG

  • start_activities – Filtered start activities

  • end_activities – Filtered end activities

  • activities_count – Filtered activities count

pm4py.algo.filtering.dfg.dfg_filtering.clean_dfg_based_on_noise_thresh(dfg, activities, noise_threshold, parameters=None)[source]#

Clean Directly-Follows graph based on noise threshold

Parameters:
  • dfg – Directly-Follows graph

  • activities – Activities in the DFG graph

  • noise_threshold – Noise threshold

Returns:

Cleaned dfg based on noise threshold

Return type:

newDfg