# Source code for pm4py.algo.discovery.log_skeleton.trace_skel

```
'''
This file is part of PM4Py (More Info: https://pm4py.fit.fraunhofer.de).
PM4Py is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
PM4Py is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with PM4Py. If not, see <https://www.gnu.org/licenses/>.
'''
from collections import Counter
[docs]def equivalence(trace):
"""
Get the equivalence relations given a list of activities
Parameters
--------------
trace
List activities
Returns
--------------
rel
Relations inside the trace
"""
ret = set()
freq = activ_freq(trace)
for x in freq:
for y in freq:
if x != y and freq[x] == freq[y]:
ret.add((x, y))
ret.add((y, x))
return ret
[docs]def after(trace):
"""
Get the after- relations given a list of activities
Parameters
--------------
trace
List activities
Returns
--------------
rel
After- inside the trace
"""
return set((trace[i], trace[j]) for i in range(len(trace)) for j in range(len(trace)) if j > i)
[docs]def before(trace):
"""
Get the before- relations given a list of activities
Parameters
--------------
trace
List activities
Returns
--------------
rel
Before- inside the trace
"""
return set((trace[i], trace[j]) for i in range(len(trace)) for j in range(len(trace)) if j < i)
[docs]def combos(trace):
"""
Get the combinations between all the activities of the trace relations given a list of activities
Parameters
--------------
trace
List activities
Returns
--------------
rel
Combos inside the trace
"""
return set((x, y) for x in trace for y in trace if x != y)
[docs]def directly_follows(trace):
"""
Get the directly-follows relations given a list of activities
Parameters
--------------
trace
List activities
Returns
--------------
rel
Directly-follows relations inside the trace
"""
return set((trace[i], trace[i+1]) for i in range(len(trace)-1))
[docs]def activ_freq(trace):
"""
Gets the frequency of activities happening in a trace
Parameters
--------------
trace
List activities
Returns
--------------
freq
Frequency of activities
"""
return Counter(trace)
[docs]def get_trace_info(trace):
"""
Technical method for conformance checking
"""
return (equivalence(trace), after(trace), before(trace), combos(trace), directly_follows(trace), activ_freq(trace))
```