Skip to content

Commit f3b9f74

Browse files
Merge branch 'release' into release-github
# Conflicts: # pm4py/__init__.py # requirements_stable.txt
2 parents 43a8d09 + e14f89f commit f3b9f74

File tree

171 files changed

+55347
-728
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

171 files changed

+55347
-728
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
/venv/
44
*.mps
55
*.sol
6+
debug.log

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ RUN apt-get -y install libtool flex bison pkg-config g++ libssl-dev automake
1313
RUN apt-get -y install libjemalloc-dev libboost-dev libboost-filesystem-dev libboost-system-dev libboost-regex-dev python3-dev autoconf flex bison cmake
1414
RUN apt-get -y install libxml2-dev libxslt-dev libfreetype6-dev libsuitesparse-dev
1515
RUN pip install -U wheel six pytest
16-
RUN pip install MarkupSafe==1.1.1 backcall==0.2.0 certifi==2020.6.20 colorama==0.4.3 decorator==4.4.2 ipython-genutils==0.2.0 joblib==0.17.0 more-itertools==8.5.0 mpmath==1.1.0 numpy==1.19.2 parso==0.8.0 pickleshare==0.7.5 Pillow==7.2.0 Pygments==2.7.1 pyparsing==2.4.7 pytz==2020.1 setuptools==50.3.0 six==1.15.0 sortedcontainers==2.2.2 threadpoolctl==2.1.0 wcwidth==0.2.5 cycler==0.10.0 jedi==0.17.2 jinja2==2.11.2 kiwisolver==1.2.0 networkx==2.5 packaging==20.4 prompt-toolkit==3.0.7 python-dateutil==2.8.1 scipy==1.5.2 traitlets==5.0.4 zipp==3.3.0 importlib-metadata==2.0.0 ipython==7.18.1 jsonpickle==1.4.1 deprecation==2.1.0 graphviz==0.14.2 intervaltree==3.1.0 lxml==4.5.2 matplotlib==3.3.2 pandas==1.1.3 pulp==2.1 pydotplus==2.0.2 pyvis==0.1.8.2 scikit-learn==0.23.2 StringDist==1.0.9 sympy==1.6.2 cython==0.29.21 tqdm==4.50.2
16+
RUN pip install MarkupSafe==1.1.1 backcall==0.2.0 certifi==2020.11.8 colorama==0.4.3 decorator==4.4.2 ipython-genutils==0.2.0 joblib==0.17.0 more-itertools==8.6.0 mpmath==1.1.0 numpy==1.19.4 parso==0.8.0 pickleshare==0.7.5 Pillow==8.0.1 Pygments==2.7.2 pyparsing==2.4.7 pytz==2020.4 setuptools==50.3.2 six==1.15.0 sortedcontainers==2.3.0 threadpoolctl==2.1.0 wcwidth==0.2.5 cycler==0.10.0 jedi==0.17.2 jinja2==2.11.2 kiwisolver==1.3.1 networkx==2.5 packaging==20.4 prompt-toolkit==3.0.7 python-dateutil==2.8.1 scipy==1.5.4 traitlets==5.0.5 zipp==3.4.0 importlib-metadata==2.0.0 ipython==7.19.0 jsonpickle==1.4.1 deprecation==2.1.0 graphviz==0.14.2 intervaltree==3.1.0 lxml==4.6.1 matplotlib==3.3.2 pandas==1.1.4 pulp==2.1 pydotplus==2.0.2 pyvis==0.1.8.2 scikit-learn==0.23.2 StringDist==1.0.9 sympy==1.6.2 cython==0.29.21 tqdm==4.51.0
1717

1818
COPY . /app
1919
RUN cd /app && cp tests/test_dockers/setups/setup_master.py setup.py && python setup.py install

README.THIRD_PARTY.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,45 +10,46 @@ to change as libraries are added or removed.
1010
| --------------------------- | ------------------------------------------------------------ | --------------------------- | ------------------- | --------------------------- | --------------------------- |
1111
| backcall | https://pypi.org/project/backcall | BSD | 0.1.0 | | |
1212
| colorama | https://pypi.org/project/colorama | BSD | 0.4.3 | | |
13+
| certifi | https://pypi.org/project/certifi | MPL 2.0 | 2020.11.8 | | |
1314
| cycler | https://pypi.org/project/cycler | BSD | 0.10.0 | | |
1415
| decorator | https://pypi.org/project/decorator | BSD | 4.4.2 | | |
1516
| deprecation | https://pypi.org/project/deprecation | Apache 2.0 | 2.1.0 | | |
1617
| graphviz | https://pypi.org/project/graphviz | MIT | 0.14.2 | X | |
1718
| importlib-metadata | https://pypi.org/project/importlib-metadata | Apache | 2.0.0 | X | |
1819
| intervaltree | https://pypi.org/project/intervaltree | Apache 2.0 | 3.1.0 | | |
19-
| ipython | https://pypi.org/project/ipython | BSD | 7.18.1 | X | |
20+
| ipython | https://pypi.org/project/ipython | BSD | 7.19.0 | X | |
2021
| ipython-genutils | https://pypi.org/project/ipython-genutils | BSD | 0.2.0 | | |
2122
| jedi | https://pypi.org/project/jedi | MIT | 0.17.0 | | |
2223
| jinja2 | https://pypi.org/project/jinja2 | BSD | 2.11.2 | | |
2324
| joblib | https://pypi.org/project/joblib | BSD | 0.17.0 | X | |
2425
| jsonpickle | https://pypi.org/project/jsonpickle | BSD | 1.4.1 | X | |
25-
| kiwisolver | https://pypi.org/project/kiwisolver | BSD | 1.2.0 | X | X |
26-
| lxml | https://pypi.org/project/lxml | BSD | 4.5.2 | X | X |
26+
| kiwisolver | https://pypi.org/project/kiwisolver | BSD | 1.3.1 | X | X |
27+
| lxml | https://pypi.org/project/lxml | BSD | 4.6.1 | X | X |
2728
| MarkupSafe | https://pypi.org/project/MarkupSafe | BSD | 1.1.1 | | X |
2829
| matplotlib | https://pypi.org/project/matplotlib | PSF | 3.3.2 | X | X |
2930
| mpmath | https://pypi.org/project/mpmath | BSD | 1.1.0 | | |
3031
| networkx | https://pypi.org/project/networkx | BSD | 2.5 | X | |
31-
| numpy | https://pypi.org/project/numpy | BSD | 1.19.2 | | X |
32+
| numpy | https://pypi.org/project/numpy | BSD | 1.19.4 | | X |
3233
| packaging | https://pypi.org/project/packaging | Apache 2.0 | 20.4 | | |
33-
| pandas | https://pypi.org/project/pandas | BSD | 1.1.3 | X | X |
34+
| pandas | https://pypi.org/project/pandas | BSD | 1.1.4 | X | X |
3435
| parso | https://pypi.org/project/parso | MIT | 0.7.0 | | |
3536
| pickleshare | https://pypi.org/project/pickleshare | MIT | 0.7.5 | X | |
3637
| prompt-toolkit | https://pypi.org/project/prompt-toolkit | BSD | 3.0.7 | | |
3738
| pulp | https://pypi.org/project/pulp | BSD | 2.1 | X | |
3839
| pydotplus | https://pypi.org/project/pydotplus | MIT | 2.0.2 | X | |
39-
| pygments | https://pypi.org/project/pygments | BSD | 2.6.1 | | |
40+
| pygments | https://pypi.org/project/pygments | BSD | 2.7.2 | | |
4041
| pyparsing | https://pypi.org/project/pyparsing | MIT | 2.4.7 | | |
4142
| python-dateutil | https://pypi.org/project/python-dateutil | Apache 2.0 | 2.8.1 | | |
42-
| pytz | https://pypi.org/project/pytz | 2020.1 | MIT | | |
43+
| pytz | https://pypi.org/project/pytz | 2020.4 | MIT | | |
4344
| pyvis | https://pypi.org/project/pyvis | BSD | 0.1.8.2 | X | |
4445
| scikit-learn | https://pypi.org/project/scikit-learn | BSD | 0.23.2 | X | X |
45-
| scipy | https://pypi.org/project/scipy | BSD | 1.5.2 | | X |
46-
| setuptools | https://pypi.org/project/setuptools | MIT | 47.1.1 | X | |
46+
| scipy | https://pypi.org/project/scipy | BSD | 1.5.4 | | X |
47+
| setuptools | https://pypi.org/project/setuptools | MIT | 50.3.2 | X | |
4748
| sympy | https://pypi.org/project/sympy | BSD | 1.6.2 | | |
4849
| six | https://pypi.org/project/six | MIT | 1.15.0 | | |
49-
| sortedcontainers | https://pypi.org/project/sortedcontainers | Apache 2.0 | 2.1.0 | | |
50+
| sortedcontainers | https://pypi.org/project/sortedcontainers | Apache 2.0 | 2.3.0 | | |
5051
| StringDist | https://pypi.org/project/StringDist | MIT | 1.0.9 | | |
5152
| threadpoolctl | https://pypi.org/project/threadpoolctl | BSD | 2.1.0 | | |
52-
| traitlets | https://pypi.org/project/traitlets | BSD | 5.0.4 | | |
53+
| traitlets | https://pypi.org/project/traitlets | BSD | 5.0.5 | | |
5354
| wcwidth | https://pypi.org/project/wcwidth | MIT | 0.1.9 | | |
54-
| zipp | https://pypi.org/project/zipp | MIT | 3.3.0 | X | |
55+
| zipp | https://pypi.org/project/zipp | MIT | 3.4.0 | X | |

RELEASE_NOTES

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
===== PM4Py 2.0.1 =====
2+
This is a minor release, consisting of the following changes:
3+
1. commit 81579e19e
4+
- relaxing the importing of some dependencies (pandas, pulp, graphviz, intervaltree)
5+
to make a basic set of functionalities of PM4Py work even without those dependencies
6+
2. commit ed45eafc
7+
- fixing circular dependencies issues and added partial compatibility with (old) Python 3.4
8+
3. commit c51b1f02
9+
- parametrizing size of the thread pool in streaming package
10+
4. commit b9d47b83
11+
- fix the live event stream class to finish all the events that are still in the internal queue when stop() is called
12+
5. commit 8e07d847
13+
- add (unbounded) dfg discovery on an event stream
14+
6. commit 4c115dbb
15+
- fix bug in hash function of traces
16+
7. commit 16e3f7f5
17+
- integration of the wf-net to process tree algorithm described in https://doi.org/10.3390/a13110279
18+
8. commit 0dd8f28e
19+
- fix bug in the alpha+ algorithm (was adding artificial start/end to the underlying event log)
20+
9. commit 1a26f678
21+
- allow creation of 'live' streaming objects directly from xes and csv files
22+
10. commit b08564ed
23+
- start minor support for interval-based process models
24+
11. commit 36cb7130
25+
- added support for generic dictionaries in streaming conformance checking
26+
27+
128
===== PM4Py 2.0.0 =====
229
This is a *major* release, consisting of the following *major* changes:
330
1. commit f408a181

examples/corr_mining.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,36 @@
1-
#import pm4pycvxopt
1+
# import pm4pycvxopt
22
import pandas as pd
3-
from pm4py.objects.log.util import dataframe_utils
3+
44
from pm4py.algo.discovery.correlation_mining import algorithm as correlation_miner
5+
from pm4py.objects.log.util import dataframe_utils
6+
from pm4py.statistics.sojourn_time.pandas import get as soj_time_get
7+
from pm4py.statistics.start_activities.pandas import get as sa_get
8+
from pm4py.statistics.end_activities.pandas import get as ea_get
9+
from pm4py.util import constants
510
from pm4py.visualization.dfg import visualizer as dfg_vis
611

712

813
def execute_script():
9-
df = pd.read_csv("../tests/input_data/receipt.csv")
14+
df = pd.read_csv("../tests/input_data/interval_event_log.csv")
1015
df = dataframe_utils.convert_timestamp_columns_in_df(df)
1116
act_count = dict(df["concept:name"].value_counts())
12-
dfg, performance_dfg = correlation_miner.apply(df, variant=correlation_miner.Variants.CLASSIC)
13-
gviz_freq = dfg_vis.apply(dfg, activities_count=act_count, variant=dfg_vis.Variants.FREQUENCY,
14-
parameters={"format": "svg"})
17+
parameters = {}
18+
parameters[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = "start_timestamp"
19+
parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = "time:timestamp"
20+
parameters["format"] = "svg"
21+
start_activities = sa_get.get_start_activities(df, parameters=parameters)
22+
end_activities = ea_get.get_end_activities(df, parameters=parameters)
23+
parameters["start_activities"] = start_activities
24+
parameters["end_activities"] = end_activities
25+
soj_time = soj_time_get.apply(df, parameters=parameters)
26+
dfg, performance_dfg = correlation_miner.apply(df, variant=correlation_miner.Variants.CLASSIC,
27+
parameters=parameters)
28+
gviz_freq = dfg_vis.apply(dfg, activities_count=act_count, soj_time=soj_time, variant=dfg_vis.Variants.FREQUENCY,
29+
parameters=parameters)
1530
dfg_vis.view(gviz_freq)
16-
gviz_perf = dfg_vis.apply(performance_dfg, activities_count=act_count, variant=dfg_vis.Variants.PERFORMANCE,
17-
parameters={"format": "svg"})
31+
gviz_perf = dfg_vis.apply(performance_dfg, activities_count=act_count, soj_time=soj_time,
32+
variant=dfg_vis.Variants.PERFORMANCE,
33+
parameters=parameters)
1834
dfg_vis.view(gviz_perf)
1935

2036

examples/debug.log

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[1108/112411.064:ERROR:directory_reader_win.cc(43)] FindFirstFile: The system cannot find the path specified. (0x3)

examples/dfg_min_ex.py

Lines changed: 0 additions & 22 deletions
This file was deleted.

examples/dfg_min_ex_log.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import os
2+
3+
from pm4py.algo.discovery.dfg import algorithm as dfg_algorithm
4+
from pm4py.objects.conversion.dfg import converter as dfg_conv
5+
from pm4py.objects.log.importer.xes import importer as xes_importer
6+
from pm4py.statistics.end_activities.log import get as ea_get
7+
from pm4py.statistics.start_activities.log import get as sa_get
8+
from pm4py.util import constants
9+
from pm4py.visualization.dfg import visualizer as dfg_vis_fact
10+
from pm4py.visualization.petrinet import visualizer as pn_vis
11+
12+
13+
def execute_script():
14+
log_path = os.path.join("..", "tests", "input_data", "interval_event_log.xes")
15+
log = xes_importer.apply(log_path)
16+
parameters = {}
17+
parameters[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = "start_timestamp"
18+
parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = "time:timestamp"
19+
parameters[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = "concept:name"
20+
parameters["format"] = "svg"
21+
start_activities = sa_get.get_start_activities(log, parameters=parameters)
22+
end_activities = ea_get.get_end_activities(log, parameters=parameters)
23+
parameters["start_activities"] = start_activities
24+
parameters["end_activities"] = end_activities
25+
dfg_freq = dfg_algorithm.apply(log, parameters=parameters, variant=dfg_algorithm.Variants.FREQUENCY)
26+
dfg_perf = dfg_algorithm.apply(log, parameters=parameters, variant=dfg_algorithm.Variants.PERFORMANCE)
27+
dfg_gv_freq = dfg_vis_fact.apply(dfg_freq, log=log, variant=dfg_vis_fact.Variants.FREQUENCY,
28+
parameters=parameters)
29+
dfg_vis_fact.view(dfg_gv_freq)
30+
dfg_gv_perf = dfg_vis_fact.apply(dfg_perf, log=log, variant=dfg_vis_fact.Variants.PERFORMANCE,
31+
parameters=parameters)
32+
dfg_vis_fact.view(dfg_gv_perf)
33+
net, im, fm = dfg_conv.apply(dfg_freq)
34+
gviz = pn_vis.apply(net, im, fm, parameters=parameters)
35+
pn_vis.view(gviz)
36+
37+
38+
if __name__ == "__main__":
39+
execute_script()

examples/dfg_min_ex_pandas.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import os
2+
3+
import pm4py
4+
from pm4py.algo.discovery.dfg.adapters.pandas import df_statistics
5+
from pm4py.objects.conversion.dfg import converter as dfg_conv
6+
from pm4py.statistics.attributes.pandas import get as att_get
7+
from pm4py.statistics.end_activities.pandas import get as ea_get
8+
from pm4py.statistics.start_activities.pandas import get as sa_get
9+
from pm4py.statistics.sojourn_time.pandas import get as soj_time_get
10+
from pm4py.util import constants
11+
from pm4py.visualization.dfg import visualizer as dfg_vis_fact
12+
from pm4py.visualization.petrinet import visualizer as pn_vis
13+
14+
15+
def execute_script():
16+
log_path = os.path.join("..", "tests", "input_data", "interval_event_log.csv")
17+
dataframe = pm4py.read_csv(log_path)
18+
parameters = {}
19+
parameters[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = "start_timestamp"
20+
parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = "time:timestamp"
21+
parameters[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = "concept:name"
22+
parameters[constants.PARAMETER_CONSTANT_CASEID_KEY] = "case:concept:name"
23+
parameters["format"] = "svg"
24+
start_activities = sa_get.get_start_activities(dataframe, parameters=parameters)
25+
end_activities = ea_get.get_end_activities(dataframe, parameters=parameters)
26+
att_count = att_get.get_attribute_values(dataframe, "concept:name", parameters=parameters)
27+
parameters["start_activities"] = start_activities
28+
parameters["end_activities"] = end_activities
29+
soj_time = soj_time_get.apply(dataframe, parameters=parameters)
30+
dfg_freq, dfg_perf = df_statistics.get_dfg_graph(dataframe, measure="both", start_timestamp_key="start_timestamp")
31+
dfg_gv_freq = dfg_vis_fact.apply(dfg_freq, activities_count=att_count, variant=dfg_vis_fact.Variants.FREQUENCY,
32+
soj_time=soj_time, parameters=parameters)
33+
dfg_vis_fact.view(dfg_gv_freq)
34+
dfg_gv_perf = dfg_vis_fact.apply(dfg_perf, activities_count=att_count, variant=dfg_vis_fact.Variants.PERFORMANCE,
35+
soj_time=soj_time, parameters=parameters)
36+
dfg_vis_fact.view(dfg_gv_perf)
37+
net, im, fm = dfg_conv.apply(dfg_freq)
38+
gviz = pn_vis.apply(net, im, fm, parameters=parameters)
39+
pn_vis.view(gviz)
40+
41+
42+
if __name__ == "__main__":
43+
execute_script()

examples/execute_everything.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,16 @@ def heu_miner_test():
166166
heu_miner_test.execute_script()
167167

168168

169-
def dfg_min_ex():
170-
from examples import dfg_min_ex
171-
print("\n\ndfg_min_ex")
172-
dfg_min_ex.execute_script()
169+
def dfg_min_ex_log():
170+
from examples import dfg_min_ex_log
171+
print("\n\ndfg_min_ex_log")
172+
dfg_min_ex_log.execute_script()
173+
174+
175+
def dfg_min_ex_pandas():
176+
from examples import dfg_min_ex_pandas
177+
print("\n\ndfg_min_ex_pandas")
178+
dfg_min_ex_pandas.execute_script()
173179

174180

175181
def graphs_visualization():
@@ -220,6 +226,12 @@ def diagn_add_dataframe():
220226
diagn_add_dataframe.execute_script()
221227

222228

229+
def pn_to_pt():
230+
from examples import pn_to_pt
231+
print("\n\npn_to_pt")
232+
pn_to_pt.execute_script()
233+
234+
223235
def visualization_align_table():
224236
from examples import visualization_align_table
225237
print("\n\nvisualization_align_table")
@@ -263,7 +275,8 @@ def execute_script(f):
263275
execute_script(align_decomposition_example)
264276
execute_script(transition_system_test)
265277
execute_script(heu_miner_test)
266-
execute_script(dfg_min_ex)
278+
execute_script(dfg_min_ex_log)
279+
execute_script(dfg_min_ex_pandas)
267280
execute_script(graphs_visualization)
268281
execute_script(backwards_token_replay)
269282
execute_script(transient_dfg)
@@ -272,4 +285,5 @@ def execute_script(f):
272285
execute_script(monte_carlo_petri_net)
273286
execute_script(visualization_processtree)
274287
execute_script(visualization_align_table)
288+
execute_script(pn_to_pt)
275289
execute_script(simplified_interface)

0 commit comments

Comments
 (0)