diff --git a/Dockerfile b/Dockerfile
index 221b535f7..120cf9e86 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -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 MarkupSafe==1.1.1 backcall==0.2.0 certifi==2020.12.5 colorama==0.4.3 decorator==4.4.2 ipython-genutils==0.2.0 joblib==1.0.0 more-itertools==8.6.0 mpmath==1.1.0 numpy==1.19.3 parso==0.7.1 pickleshare==0.7.5 Pillow==8.1.0 Pygments==2.7.3 pyparsing==2.4.7 pytz==2020.5 setuptools==51.1.1 six==1.15.0 sortedcontainers==2.3.0 threadpoolctl==2.1.0 wcwidth==0.2.5 cycler==0.10.0 jedi==0.18.0 jinja2==2.11.2 kiwisolver==1.3.1 networkx==2.5 packaging==20.8 prompt-toolkit==3.0.7 python-dateutil==2.8.1 scipy==1.6.0 traitlets==5.0.5 zipp==3.4.0 importlib-metadata==3.3.0 ipython==7.19.0 jsonpickle==1.4.2 deprecation==2.1.0 graphviz==0.16 intervaltree==3.1.0 lxml==4.6.1 matplotlib==3.3.3 pandas==1.2.0 pulp==2.1 pydotplus==2.0.2 pyvis==0.1.8.2 scikit-learn==0.24.0 StringDist==1.0.9 sympy==1.7.1 cython==0.29.21 tqdm==4.55.1
+RUN pip install MarkupSafe==1.1.1 backcall==0.2.0 certifi==2020.12.5 colorama==0.4.3 decorator==4.4.2 ipython-genutils==0.2.0 joblib==1.0.0 more-itertools==8.6.0 mpmath==1.1.0 numpy==1.19.3 parso==0.8.1 pickleshare==0.7.5 Pillow==8.1.0 Pygments==2.7.3 pyparsing==2.4.7 pytz==2020.5 setuptools==51.1.1 six==1.15.0 sortedcontainers==2.3.0 threadpoolctl==2.1.0 wcwidth==0.2.5 cycler==0.10.0 jedi==0.18.0 jinja2==2.11.2 kiwisolver==1.3.1 networkx==2.5 packaging==20.8 prompt-toolkit==3.0.9 python-dateutil==2.8.1 scipy==1.6.0 traitlets==5.0.5 zipp==3.4.0 importlib-metadata==3.3.0 ipython==7.19.0 jsonpickle==1.4.2 deprecation==2.1.0 graphviz==0.16 intervaltree==3.1.0 lxml==4.6.1 matplotlib==3.3.3 pandas==1.2.0 pulp==2.1 pydotplus==2.0.2 pyvis==0.1.8.2 scikit-learn==0.24.0 StringDist==1.0.9 sympy==1.7.1 cython==0.29.21 tqdm==4.55.1
COPY . /app
RUN cd /app && cp tests/test_dockers/setups/setup_master.py setup.py && python setup.py install
diff --git a/README.THIRD_PARTY.md b/README.THIRD_PARTY.md
index e66c72b61..28192edb8 100644
--- a/README.THIRD_PARTY.md
+++ b/README.THIRD_PARTY.md
@@ -32,9 +32,9 @@ to change as libraries are added or removed.
| numpy | https://pypi.org/project/numpy | BSD | 1.19.3 | | X |
| packaging | https://pypi.org/project/packaging | Apache 2.0 | 20.8 | | |
| pandas | https://pypi.org/project/pandas | BSD | 1.2.0 | X | X |
-| parso | https://pypi.org/project/parso | MIT | 0.7.1 | | |
+| parso | https://pypi.org/project/parso | MIT | 0.8.1 | | |
| pickleshare | https://pypi.org/project/pickleshare | MIT | 0.7.5 | X | |
-| prompt-toolkit | https://pypi.org/project/prompt-toolkit | BSD | 3.0.7 | | |
+| prompt-toolkit | https://pypi.org/project/prompt-toolkit | BSD | 3.0.9 | | |
| pulp | https://pypi.org/project/pulp | BSD | 2.1 | X | |
| pydotplus | https://pypi.org/project/pydotplus | MIT | 2.0.2 | X | |
| pygments | https://pypi.org/project/pygments | BSD | 2.7.3 | | |
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 151e5fe25..d64fb6223 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -1,3 +1,8 @@
+===== PM4Py 2.1.3.2 =====
+This is a *hotfix* release, consisting of the following changes:
+1. commit b5cb7f0d, f1c0f037, 960d40e9
+ fix naming consistency in the filtering interface of pm4py.
+
===== PM4Py 2.1.3.1 =====
This is a *hotfix* release, consisting of the following changes:
1. commit f9f894ed
diff --git a/examples/simplified_interface.py b/examples/simplified_interface.py
index 747e71347..865d0d4cb 100644
--- a/examples/simplified_interface.py
+++ b/examples/simplified_interface.py
@@ -86,15 +86,15 @@ def execute_script():
print("end_activities len(filt_log) = ", len(pm4py.filter_end_activities(log2, ["pay compensation"])))
print("end_activities len(filt_df) = ", len(pm4py.filter_end_activities(df2, ["pay compensation"])))
print("attributes org:resource len(filt_log) (cases) cases = ",
- len(pm4py.filter_attribute_values(log2, "org:resource", ["Ellen"], level="cases")))
+ len(pm4py.filter_attribute_values(log2, "org:resource", ["Ellen"], level="case")))
print("attributes org:resource len(filt_log) (cases) events = ",
- len(pm4py.filter_attribute_values(log2, "org:resource", ["Ellen"], level="events")))
+ len(pm4py.filter_attribute_values(log2, "org:resource", ["Ellen"], level="event")))
print("attributes org:resource len(filt_df) (events) cases = ",
- len(pm4py.filter_attribute_values(df2, "org:resource", ["Ellen"], level="cases")))
+ len(pm4py.filter_attribute_values(df2, "org:resource", ["Ellen"], level="case")))
print("attributes org:resource len(filt_df) (events) events = ",
- len(pm4py.filter_attribute_values(df2, "org:resource", ["Ellen"], level="events")))
+ len(pm4py.filter_attribute_values(df2, "org:resource", ["Ellen"], level="event")))
print("attributes org:resource len(filt_df) (events) events notpositive = ",
- len(pm4py.filter_attribute_values(df2, "org:resource", ["Ellen"], level="events", retain=False)))
+ len(pm4py.filter_attribute_values(df2, "org:resource", ["Ellen"], level="event", retain=False)))
print("variants log = ", pm4py.get_variants(log2))
print("variants df = ", pm4py.get_variants(df2))
@@ -104,23 +104,25 @@ def execute_script():
print("variants filter df = ",
len(pm4py.filter_variants(df2, [
["register request", "examine thoroughly", "check ticket", "decide", "reject request"]])))
- print("variants filter percentage = ", len(pm4py.filter_variants_percentage(log2, percentage=0.8)))
+ print("variants filter percentage = ", len(pm4py.filter_variants_percentage(log2, threshold=0.8)))
- print("paths filter log len = ", len(pm4py.filter_directly_follows_relation(log2, [("register request", "examine casually")])))
- print("paths filter dataframe len = ", len(pm4py.filter_directly_follows_relation(df2, [("register request", "examine casually")])))
+ print("paths filter log len = ",
+ len(pm4py.filter_directly_follows_relation(log2, [("register request", "examine casually")])))
+ print("paths filter dataframe len = ",
+ len(pm4py.filter_directly_follows_relation(df2, [("register request", "examine casually")])))
print("timeframe filter log events len = ",
- len(pm4py.filter_timestamp(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="events")))
+ len(pm4py.filter_time_range(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="events")))
print("timeframe filter log traces_contained len = ",
- len(pm4py.filter_timestamp(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_contained")))
+ len(pm4py.filter_time_range(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_contained")))
print("timeframe filter log traces_intersecting len = ",
- len(pm4py.filter_timestamp(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_intersecting")))
+ len(pm4py.filter_time_range(log2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_intersecting")))
print("timeframe filter df events len = ",
- len(pm4py.filter_timestamp(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="events")))
+ len(pm4py.filter_time_range(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="events")))
print("timeframe filter df traces_contained len = ",
- len(pm4py.filter_timestamp(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_contained")))
+ len(pm4py.filter_time_range(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_contained")))
print("timeframe filter df traces_intersecting len = ",
- len(pm4py.filter_timestamp(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_intersecting")))
+ len(pm4py.filter_time_range(df2, "2011-01-01 00:00:00", "2011-02-01 00:00:00", mode="traces_intersecting")))
# remove the temporary files
os.remove("ru1.xes")
diff --git a/pm4py/__init__.py b/pm4py/__init__.py
index 8579e6401..38c1a1519 100644
--- a/pm4py/__init__.py
+++ b/pm4py/__init__.py
@@ -1,4 +1,4 @@
-VERSION = '2.1.3.1'
+VERSION = '2.1.3.2'
import logging
import pkgutil
@@ -79,8 +79,8 @@
save_vis_process_tree, \
view_heuristics_net, save_vis_heuristics_net, view_bpmn, save_vis_bpmn
from pm4py.filtering import filter_start_activities, filter_end_activities, filter_attribute_values, filter_variants, \
- filter_variants_percentage, filter_directly_follows_relation, filter_timestamp, filter_trace_attribute, \
- filter_eventually_follows
+ filter_variants_percentage, filter_directly_follows_relation, filter_time_range, filter_trace_attribute, \
+ filter_eventually_follows_relation, filter_event_attribute_values, filter_trace_attribute_values
from pm4py.stats import get_start_activities, get_end_activities, get_attributes, get_attribute_values, get_variants, \
get_trace_attributes
from pm4py.convert import convert_to_event_log, convert_to_event_stream, convert_to_dataframe, convert_to_bpmn, \
diff --git a/pm4py/filtering.py b/pm4py/filtering.py
index 0d6b689a5..b60afdba5 100644
--- a/pm4py/filtering.py
+++ b/pm4py/filtering.py
@@ -65,9 +65,16 @@ def filter_end_activities(log, activities, retain=True):
parameters={end_activities_filter.Parameters.POSITIVE: retain})
+@deprecation.deprecated(deprecated_in='2.1.4', removed_in='2.3.0', current_version=PM4PY_CURRENT_VERSION,
+ details='Filtering method will be removed due to fuzzy naming.\
+ Use: filter_event_attribute_values')
def filter_attribute_values(log, attribute_key, values, level="case", retain=True):
+ return filter_event_attribute_values(log, attribute_key, values, level=level, retain=retain)
+
+
+def filter_event_attribute_values(log, attribute_key, values, level="case", retain=True):
"""
- Filter a log object on the values of some attribute
+ Filter a log object on the values of some event attribute
Parameters
--------------
@@ -97,19 +104,28 @@ def filter_attribute_values(log, attribute_key, values, level="case", retain=Tru
attributes_filter.Parameters.POSITIVE: retain})
elif level == "case":
return attributes_filter.apply(log, values, parameters={
- constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: attribute_key, attributes_filter.Parameters.POSITIVE: retain})
+ constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: attribute_key,
+ attributes_filter.Parameters.POSITIVE: retain})
else:
from pm4py.algo.filtering.log.attributes import attributes_filter
if level == "event":
return attributes_filter.apply_events(log, values,
parameters={constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: attribute_key,
attributes_filter.Parameters.POSITIVE: retain})
- else:
+ elif level == "case":
return attributes_filter.apply(log, values, parameters={
- constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: attribute_key, attributes_filter.Parameters.POSITIVE: retain})
+ constants.PARAMETER_CONSTANT_ATTRIBUTE_KEY: attribute_key,
+ attributes_filter.Parameters.POSITIVE: retain})
+@deprecation.deprecated(deprecated_in='2.1.4', removed_in='2.3.0', current_version=PM4PY_CURRENT_VERSION,
+ details='Filtering method will be removed due to fuzzy naming.\
+ Use: filter_event_attribute_values')
def filter_trace_attribute(log, attribute_key, values, retain=True):
+ return filter_trace_attribute_values(log, attribute_key, values, retain=retain)
+
+
+def filter_trace_attribute_values(log, attribute_key, values, retain=True):
"""
Filter a log on the values of a trace attribute
@@ -232,7 +248,7 @@ def filter_directly_follows_relation(log, relations, retain=True):
return paths_filter.apply(log, relations, parameters={paths_filter.Parameters.POSITIVE: retain})
-def filter_eventually_follows(log, relations, retain=True):
+def filter_eventually_follows_relation(log, relations, retain=True):
"""
Retain traces that contain any of the specified 'eventually follows' relations.
For example, if relations == [('a','b'),('a','c')] and log [,,]
@@ -291,7 +307,7 @@ def filter_eventually_follows(log, relations, retain=True):
return filtered_log
-def filter_timestamp(log, dt1, dt2, mode="events"):
+def filter_time_range(log, dt1, dt2, mode="events"):
"""
Filter a log on a time interval
diff --git a/requirements_stable.txt b/requirements_stable.txt
index eec331db3..71abb6937 100644
--- a/requirements_stable.txt
+++ b/requirements_stable.txt
@@ -9,7 +9,7 @@ joblib==1.0.0
more-itertools==8.6.0
mpmath==1.1.0
numpy==1.19.3
-parso==0.7.1
+parso==0.8.1
pickleshare==0.7.5
Pillow==8.1.0
Pygments==2.7.3
@@ -26,7 +26,7 @@ jinja2==2.11.2
kiwisolver==1.3.1
networkx==2.5
packaging==20.8
-prompt-toolkit==3.0.8
+prompt-toolkit==3.0.9
python-dateutil==2.8.1
scipy==1.6.0
traitlets==5.0.5
diff --git a/scripts/script.py b/scripts/script.py
deleted file mode 100644
index 7be14c328..000000000
--- a/scripts/script.py
+++ /dev/null
@@ -1,7 +0,0 @@
-import pm4py
-
-
-if __name__ == "__main__":
- log = pm4py.read_xes('../tests/input_data/running-example.xes')
- allowed = {'a', 'b', 'c'}
- filtered = pm4py.filter_log(lambda t: t[0] in allowed, log)