pm4py.algo.discovery.inductive.cuts.loop module#

class pm4py.algo.discovery.inductive.cuts.loop.LoopCut[source]#

Bases: Cut[T], ABC, Generic[T]

classmethod operator(parameters: Dict[str, Any] | None = None) ProcessTree[source]#
classmethod holds(obj: T, parameters: Dict[str, Any] | None = None) List[Collection[Any]] | None[source]#

This method finds a loop cut in the dfg. Implementation follows function LoopCut on page 190 of “Robust Process Mining with Guarantees” by Sander J.J. Leemans (ISBN: 978-90-386-4257-4)

Basic Steps: 1. merge all start and end activities in one group (‘do’ group) 2. remove start/end activities from the dfg 3. detect connected components in (undirected representative) of the reduced graph 4. check if each component meets the start/end criteria of the loop cut definition (merge with the ‘do’ group if not) 5. return the cut if at least two groups remain

class pm4py.algo.discovery.inductive.cuts.loop.LoopCutUVCL[source]#

Bases: LoopCut[IMDataStructureUVCL]

classmethod project(obj: IMDataStructureUVCL, groups: List[Collection[Any]], parameters: Dict[str, Any] | None = None) List[IMDataStructureUVCL][source]#

Projection of the given data object (Generic type T). Returns a corresponding process tree and the projected sub logs according to the identified groups. A precondition of the project function is that it holds on the object for the given Object

class pm4py.algo.discovery.inductive.cuts.loop.LoopCutDFG[source]#

Bases: LoopCut[IMDataStructureDFG]

classmethod project(obj: IMDataStructureUVCL, groups: List[Collection[Any]], parameters: Dict[str, Any] | None = None) List[IMDataStructureDFG][source]#

Projection of the given data object (Generic type T). Returns a corresponding process tree and the projected sub logs according to the identified groups. A precondition of the project function is that it holds on the object for the given Object