Skip to content

Commit

Permalink
Merge branch 'release' into github-release
Browse files Browse the repository at this point in the history
# Conflicts:
#	pm4py/meta.py
#	pm4py/streaming/conversion/__init__.py
#	pm4py/util/lp/solver.py
#	pm4py/util/lp/variants/ortools_solver.py
#	pm4py/visualization/dfg/variants/performance.py
#	requirements_stable.txt
  • Loading branch information
fit-sebastiaan-van-zelst committed Apr 1, 2022
2 parents d20d3c7 + e851bd2 commit 96cc277
Show file tree
Hide file tree
Showing 99 changed files with 414 additions and 190 deletions.
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,32 @@
## pm4py 2.2.20

### Added

### Changed
* 762fa3ec987705f12a42decb13862323f600e3c9
* apply explicit conversions to event log throughout pm4py code base

### Deprecated

### Fixed
* 1bcadff3acacfda2463cf9325f873004e15ed915
* Bug fix / efficiency change on the format_dataframe utility function.
* d8797f574d605ad1591c66a96c1f54346c856878
* Fixed missing import in DFG performance visualization.
* f4f5a0eee8218be5c575fe8b42ab59e335979d53
* Fixed hardcoded parameter in feature extraction interface
* e61fb3f7a763a89cfb221b3c37c1b140620f5df9
* Fixed performance DFG visualization when all values are provided
* fb9c152afdf6b91c3b26efa09d8233e99c55b907
* Fixed progress bar behavior in TBR-based ET-Conformance

### Removed
* 639aeb64bf5febf5f5719622d6d90c4a3c5cd8be
* Removed ORTOOLS as available linear solver.

### Other


## pm4py 2.2.19.2

### Added
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ RUN apt-get -y install libtool flex bison pkg-config g++ libssl-dev automake
RUN apt-get -y install libjemalloc-dev libboost-dev libboost-filesystem-dev libboost-system-dev libboost-regex-dev python3-dev autoconf flex bison cmake
RUN apt-get -y install libxml2-dev libxslt-dev libfreetype6-dev libsuitesparse-dev
RUN pip install -U wheel six pytest
RUN pip install backcall==0.2.0 colorama==0.4.4 cycler==0.11.0 decorator==5.1.1 deprecation==2.1.0 fonttools==4.29.1 graphviz==0.19.1 intervaltree==3.1.0 ipython==8.0.1 jedi==0.18.1 jinja2==3.0.3 jsonpickle==2.1.0 kiwisolver==1.3.2 lxml==4.7.1 MarkupSafe==2.0.1 matplotlib==3.5.1 matplotlib-inline==0.1.3 mpmath==1.2.1 networkx==2.6.3 numpy==1.22.2 packaging==21.3 pandas==1.4.0 parso==0.8.3 pickleshare==0.7.5 pillow==9.0.1 prompt-toolkit==3.0.27 pydotplus==2.0.2 pygments==2.11.2 pyparsing==3.0.7 python-dateutil==2.8.2 pytz==2021.3 pyvis==0.1.9 scipy==1.8.0 setuptools==60.8.2 six==1.16.0 sortedcontainers==2.4.0 stringdist==1.0.9 sympy==1.9 tqdm==4.62.3 traitlets==5.1.1 wcwidth==0.2.5
RUN pip install asttokens==2.0.5 backcall==0.2.0 colorama==0.4.4 cycler==0.11.0 decorator==5.1.1 deprecation==2.1.0 executing==0.8.3 fonttools==4.31.2 graphviz==0.19.1 intervaltree==3.1.0 ipython==8.2.0 jedi==0.18.1 jinja2==3.1.1 jsonpickle==2.1.0 kiwisolver==1.4.2 lxml==4.8.0 MarkupSafe==2.1.1 matplotlib==3.5.1 matplotlib-inline==0.1.3 mpmath==1.2.1 networkx==2.7.1 numpy==1.22.3 packaging==21.3 pandas==1.4.1 parso==0.8.3 pickleshare==0.7.5 pillow==9.0.1 prompt-toolkit==3.0.28 pure-eval==0.2.2 pydotplus==2.0.2 pygments==2.11.2 pyparsing==3.0.7 python-dateutil==2.8.2 pytz==2022.1 pyvis==0.1.9 scipy==1.8.0 setuptools==61.3.0 six==1.16.0 sortedcontainers==2.4.0 stack-data==0.2.0 stringdist==1.0.9 sympy==1.10.1 tqdm==4.63.1 traitlets==5.1.1 wcwidth==0.2.5

COPY . /app
RUN cd /app && python setup.py install
2 changes: 1 addition & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
# The short X.Y version
version = '2.2'
# The full version, including alpha/beta/rc tags
release = '2.2.19.2'
release = '2.2.19.3'

# -- General configuration ---------------------------------------------------

Expand Down
14 changes: 0 additions & 14 deletions examples/execute_everything.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,18 +124,6 @@ def discovery_data_petri_net():
discovery_data_petri_net.execute_script()


def pandas_iterable():
from examples import pandas_iterable
print("\n\npandas_iterable")
pandas_iterable.execute_script()


def pandas_iterable_to_trace_stream():
from examples import pandas_iterable_to_trace_stream
print("\n\npandas_iterable_to_trace_stream")
pandas_iterable_to_trace_stream.execute_script()


def performance_dfg_simulation():
from examples import performance_dfg_simulation
print("\n\nperformance_dfg_simulation")
Expand Down Expand Up @@ -575,8 +563,6 @@ def execute_script(f):
execute_script(extended_marking_equation)
execute_script(features_locally_linear_embedding)
execute_script(discovery_data_petri_net)
execute_script(pandas_iterable)
execute_script(pandas_iterable_to_trace_stream)
execute_script(data_petri_nets)
execute_script(inhibitor_reset_arcs)
execute_script(dotted_chart)
Expand Down
18 changes: 0 additions & 18 deletions examples/pandas_iterable.py

This file was deleted.

22 changes: 0 additions & 22 deletions examples/pandas_iterable_to_trace_stream.py

This file was deleted.

2 changes: 1 addition & 1 deletion pm4py/algo/clustering/trace_attribute_driven/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ def apply(log: Union[EventLog, EventStream, pd.DataFrame], trace_attribute: str,
if parameters is None:
parameters = {}

log = log_converter.apply(log, parameters=parameters)
log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)

percent = 1
alpha = 0.5
Expand Down
7 changes: 6 additions & 1 deletion pm4py/algo/comparison/petrinet/element_usage_comparison.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
from typing import Optional, Dict, Any, Union, Tuple
from pm4py.objects.log.obj import EventLog, EventStream
from pm4py.objects.petri_net.obj import PetriNet, Marking
from pm4py.objects.conversion.log import converter as log_converter
import pandas as pd


def give_color_to_direction_dynamic(dir):
Expand Down Expand Up @@ -74,7 +76,7 @@ def give_color_to_direction_static(dir):
return col[1]


def compare_element_usage_two_logs(net: PetriNet, im: Marking, fm: Marking, log1: EventLog, log2: EventLog, parameters: Optional[Dict[Any, Any]] = None) -> Dict[Any, Any]:
def compare_element_usage_two_logs(net: PetriNet, im: Marking, fm: Marking, log1: Union[EventLog, pd.DataFrame], log2: Union[EventLog, pd.DataFrame], parameters: Optional[Dict[Any, Any]] = None) -> Dict[Any, Any]:
"""
Returns some statistics (also visual) about the comparison of the usage
of the elements in two logs given an accepting Petri net
Expand Down Expand Up @@ -102,6 +104,9 @@ def compare_element_usage_two_logs(net: PetriNet, im: Marking, fm: Marking, log1
if parameters is None:
parameters = {}

log1 = log_converter.apply(log1, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)
log2 = log_converter.apply(log2, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)

tr_parameters = copy(parameters)
tr_parameters[tr_algorithm.Variants.TOKEN_REPLAY.value.Parameters.ENABLE_PLTR_FITNESS] = True

Expand Down
3 changes: 2 additions & 1 deletion pm4py/algo/conformance/alignments/decomposed/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from pm4py.objects.log.obj import EventLog
from pm4py.objects.petri_net.obj import PetriNet, Marking
from pm4py.util import typing
import pandas as pd


class Variants(Enum):
Expand All @@ -30,7 +31,7 @@ class Variants(Enum):
VERSIONS = {Variants.RECOMPOS_MAXIMAL}


def apply(log: EventLog, net: PetriNet, im: Marking, fm: Marking, variant=Variants.RECOMPOS_MAXIMAL, parameters: Optional[Dict[Any, Any]] = None) -> typing.ListAlignments:
def apply(log: Union[EventLog, pd.DataFrame], net: PetriNet, im: Marking, fm: Marking, variant=Variants.RECOMPOS_MAXIMAL, parameters: Optional[Dict[Any, Any]] = None) -> typing.ListAlignments:
"""
Apply the recomposition alignment approach
to a log and a Petri net performing decomposition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
from pm4py.objects.log.obj import EventLog
from pm4py.objects.petri_net.obj import PetriNet, Marking
from pm4py.util import typing
from pm4py.objects.conversion.log import converter as log_converter


class Parameters(Enum):
Expand Down Expand Up @@ -142,6 +143,8 @@ def apply(log: EventLog, net: PetriNet, im: Marking, fm: Marking, parameters: Op
if parameters is None:
parameters = {}

log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)

best_worst_cost = get_best_worst_cost(net, im, fm, parameters=parameters)
parameters[Parameters.BEST_WORST_COST] = best_worst_cost

Expand Down
3 changes: 2 additions & 1 deletion pm4py/algo/conformance/alignments/dfg/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@
from pm4py.objects.log.obj import EventLog, Trace
from typing import Optional, Dict, Any, Union, Tuple
from pm4py.util import typing
import pandas as pd


class Variants(Enum):
CLASSIC = classic


def apply(obj: Union[EventLog, Trace], dfg: Dict[Tuple[str, str], int], sa: Dict[str, int], ea: Dict[str, int], variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]:
def apply(obj: Union[EventLog, pd.DataFrame, Trace], dfg: Dict[Tuple[str, str], int], sa: Dict[str, int], ea: Dict[str, int], variant=Variants.CLASSIC, parameters: Optional[Dict[Any, Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]:
"""
Applies the alignment algorithm provided a log/trace object, and a *connected* DFG
Expand Down
9 changes: 6 additions & 3 deletions pm4py/algo/conformance/alignments/dfg/variants/classic.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from pm4py.objects.log.obj import EventLog, Trace
from typing import Optional, Dict, Any, Union, Tuple
from pm4py.util import typing
from pm4py.objects.conversion.log import converter as log_converter


class Parameters(Enum):
Expand Down Expand Up @@ -88,10 +89,10 @@ def apply(obj: Union[EventLog, Trace], dfg: Dict[Tuple[str, str], int], sa: Dict
ali
Result of the alignment
"""
if isinstance(obj, EventLog):
return apply_log(obj, dfg, sa, ea, parameters=parameters)
elif isinstance(obj, Trace):
if isinstance(obj, Trace):
return apply_trace(obj, dfg, sa, ea, parameters=parameters)
else:
return apply_log(obj, dfg, sa, ea, parameters=parameters)


def apply_log(log, dfg, sa, ea, parameters=None):
Expand Down Expand Up @@ -128,6 +129,8 @@ def apply_log(log, dfg, sa, ea, parameters=None):
if parameters is None:
parameters = {}

log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)

activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY)
aligned_traces = []
align_dict = {}
Expand Down
5 changes: 3 additions & 2 deletions pm4py/algo/conformance/alignments/edit_distance/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,20 @@
along with PM4Py. If not, see <https://www.gnu.org/licenses/>.
'''
from enum import Enum
from typing import Optional, Dict, Any
from typing import Optional, Dict, Any, Union

from pm4py.algo.conformance.alignments.edit_distance.variants import edit_distance
from pm4py.objects.log.obj import EventLog
from pm4py.util import exec_utils
from pm4py.util import typing
import pandas as pd


class Variants(Enum):
EDIT_DISTANCE = edit_distance


def apply(log1: EventLog, log2: EventLog, variant=Variants.EDIT_DISTANCE,
def apply(log1: Union[EventLog, pd.DataFrame], log2: Union[EventLog, pd.DataFrame], variant=Variants.EDIT_DISTANCE,
parameters: Optional[Dict[Any, Any]] = None) -> typing.ListAlignments:
"""
Aligns each trace of the first log against the second log
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
from pm4py.util import exec_utils
from pm4py.util import string_distance
from pm4py.util import typing
from pm4py.objects.conversion.log import converter as log_converter


class Parameters(Enum):
Expand Down Expand Up @@ -51,6 +52,9 @@ def apply(log1: EventLog, log2: EventLog, parameters: Optional[Dict[Union[str, P
if parameters is None:
parameters = {}

log1 = log_converter.apply(log1, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)
log2 = log_converter.apply(log2, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)

anti_alignment = exec_utils.get_param_value(Parameters.PERFORM_ANTI_ALIGNMENT, parameters, False)

aligned_traces = []
Expand Down
6 changes: 5 additions & 1 deletion pm4py/algo/conformance/alignments/process_tree/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
from pm4py.objects.process_tree.obj import ProcessTree
from pm4py.objects.log.obj import EventLog, Trace
from pm4py.util import typing
from pm4py.objects.conversion.log import converter as log_converter
import pandas as pd


class Variants(Enum):
Expand All @@ -36,7 +38,7 @@ class Variants(Enum):
DEFAULT_VARIANT = Variants.SEARCH_GRAPH_PT


def apply(obj: Union[EventLog, Trace], pt: ProcessTree, variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]:
def apply(obj: Union[EventLog, Trace, pd.DataFrame], pt: ProcessTree, variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> Union[typing.AlignmentResult, typing.ListAlignments]:
"""
Align an event log or a trace with a process tree
Expand All @@ -59,4 +61,6 @@ def apply(obj: Union[EventLog, Trace], pt: ProcessTree, variant=DEFAULT_VARIANT,
if parameters is None:
parameters = {}

obj = log_converter.apply(obj, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)

return exec_utils.get_variant(variant).apply(obj, pt, parameters=parameters)
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
from pm4py.objects.process_tree.obj import ProcessTree
from pm4py.objects.log.obj import EventLog, Trace
from pm4py.util import typing
from pm4py.objects.conversion.log import converter as log_converter


class Parameters(Enum):
Expand Down Expand Up @@ -364,6 +365,8 @@ def apply(obj: Union[EventLog, Trace], pt: ProcessTree, parameters: Optional[Dic
if parameters is None:
parameters = {}

obj = log_converter.apply(obj, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)

leaves = frozenset(pt_util.get_leaves_as_tuples(pt))
activity_key = exec_utils.get_param_value(Parameters.ACTIVITY_KEY, parameters, xes_constants.DEFAULT_NAME_KEY)
if type(obj) is Trace:
Expand Down
6 changes: 3 additions & 3 deletions pm4py/algo/conformance/log_skeleton/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class Variants(Enum):
DEFAULT_VARIANT = Variants.CLASSIC


def apply(obj: Union[EventLog, Trace], model: Dict[str, Any], variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> List[Set[Any]]:
def apply(obj: Union[EventLog, Trace, pd.DataFrame], model: Dict[str, Any], variant=DEFAULT_VARIANT, parameters: Optional[Dict[Any, Any]] = None) -> List[Set[Any]]:
"""
Apply log-skeleton based conformance checking given an event log/trace
and a log-skeleton model
Expand Down Expand Up @@ -62,10 +62,10 @@ def apply(obj: Union[EventLog, Trace], model: Dict[str, Any], variant=DEFAULT_VA
parameters = {}

if type(obj) is Trace:
return exec_utils.get_variant(variant).apply_trace(log_conversion.apply(obj, parameters=parameters), model,
return exec_utils.get_variant(variant).apply_trace(log_conversion.apply(obj, variant=log_conversion.Variants.TO_EVENT_LOG, parameters=parameters), model,
parameters=parameters)
else:
return exec_utils.get_variant(variant).apply_log(log_conversion.apply(obj, parameters=parameters), model,
return exec_utils.get_variant(variant).apply_log(log_conversion.apply(obj, variant=log_conversion.Variants.TO_EVENT_LOG, parameters=parameters), model,
parameters=parameters)


Expand Down
2 changes: 1 addition & 1 deletion pm4py/algo/conformance/temporal_profile/variants/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def apply(log: EventLog, temporal_profile: typing.TemporalProfile,
if parameters is None:
parameters = {}

log = log_converter.apply(log, parameters=parameters)
log = log_converter.apply(log, variant=log_converter.Variants.TO_EVENT_LOG, parameters=parameters)

business_hours = exec_utils.get_param_value(Parameters.BUSINESS_HOURS, parameters, False)
worktiming = exec_utils.get_param_value(Parameters.WORKTIMING, parameters, [7, 17])
Expand Down
2 changes: 1 addition & 1 deletion pm4py/algo/conformance/tokenreplay/algorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def apply(log: Union[EventLog, EventStream, pd.DataFrame], net: PetriNet, initia
"""
if parameters is None:
parameters = {}
return exec_utils.get_variant(variant).apply(log_converter.apply(log, parameters, log_converter.TO_EVENT_LOG), net, initial_marking,
return exec_utils.get_variant(variant).apply(log_converter.apply(log, variant=log_converter.TO_EVENT_LOG, parameters=parameters), net, initial_marking,
final_marking, parameters=parameters)


Expand Down
Loading

0 comments on commit 96cc277

Please sign in to comment.