'''
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/>.
'''
import warnings
import deprecation
from pm4py.objects.bpmn.obj import BPMN
from pm4py.objects.log.obj import EventLog, EventStream
from pm4py.objects.ocel.obj import OCEL
from pm4py.objects.petri_net.obj import PetriNet, Marking
from pm4py.objects.process_tree.obj import ProcessTree
import pandas as pd
from typing import Union
[docs]def write_xes(log: Union[EventLog, pd.DataFrame], file_path: str) -> None:
"""
Exports a XES log
Parameters
--------------
log
Event log
file_path
Destination path
Returns
-------------
void
"""
if type(log) not in [pd.DataFrame, EventLog, EventStream]: raise Exception("the method can be applied only to a traditional event log!")
from pm4py.objects.log.exporter.xes import exporter as xes_exporter
xes_exporter.apply(log, file_path)
[docs]def write_pnml(petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, file_path: str) -> None:
"""
Exports a (composite) Petri net object
Parameters
------------
petri_net
Petri net
initial_marking
Initial marking
final_marking
Final marking
file_path
Destination path
Returns
------------
void
"""
from pm4py.objects.petri_net.exporter import exporter as petri_exporter
petri_exporter.apply(petri_net, initial_marking, file_path, final_marking=final_marking)
[docs]@deprecation.deprecated(deprecated_in='2.2.2', removed_in='2.4.0',
details='write_petri_net is deprecated, please use write_pnml')
def write_petri_net(petri_net: PetriNet, initial_marking: Marking, final_marking: Marking, file_path: str) -> None:
warnings.warn('write_petri_net is deprecated, please use write_pnml', DeprecationWarning)
"""
Exports a (composite) Petri net object
Parameters
------------
petri_net
Petri net
initial_marking
Initial marking
final_marking
Final marking
file_path
Destination path
Returns
------------
void
"""
from pm4py.objects.petri_net.exporter import exporter as petri_exporter
petri_exporter.apply(petri_net, initial_marking, file_path, final_marking=final_marking)
[docs]def write_ptml(tree: ProcessTree, file_path: str) -> None:
"""
Exports a process tree
Parameters
------------
tree
Process tree
file_path
Destination path
Returns
------------
void
"""
from pm4py.objects.process_tree.exporter import exporter as tree_exporter
tree_exporter.apply(tree, file_path)
[docs]@deprecation.deprecated(deprecated_in='2.2.2', removed_in='2.4.0',
details='write_process_tree is deprecated, please use write_ptml')
def write_process_tree(tree: ProcessTree, file_path: str) -> None:
warnings.warn('write_process_tree is deprecated, please use write_ptml', DeprecationWarning)
"""
Exports a process tree
Parameters
------------
tree
Process tree
file_path
Destination path
Returns
------------
void
"""
from pm4py.objects.process_tree.exporter import exporter as tree_exporter
tree_exporter.apply(tree, file_path)
[docs]def write_dfg(dfg: dict, start_activities: dict, end_activities: dict, file_path: str):
"""
Exports a DFG
Parameters
-------------
dfg
DFG
start_activities
Start activities
end_activities
End activities
file_path
Destination path
Returns
------------
void
"""
from pm4py.objects.dfg.exporter import exporter as dfg_exporter
dfg_exporter.apply(dfg, file_path,
parameters={dfg_exporter.Variants.CLASSIC.value.Parameters.START_ACTIVITIES: start_activities,
dfg_exporter.Variants.CLASSIC.value.Parameters.END_ACTIVITIES: end_activities})
[docs]def write_bpmn(bpmn_graph: BPMN, file_path: str, enable_layout: bool = True):
"""
Writes a BPMN to a file
Parameters
---------------
bpmn_graph
BPMN
file_path
Destination path
enable_layout
Enables the automatic layouting of the BPMN diagram (default: True)
"""
if enable_layout:
from pm4py.objects.bpmn.layout import layouter
bpmn_graph = layouter.apply(bpmn_graph)
from pm4py.objects.bpmn.exporter import exporter
exporter.apply(bpmn_graph, file_path)
[docs]def write_ocel(ocel: OCEL, file_path: str, objects_path: str = None):
"""
Stores the content of the object-centric event log to a file.
Different formats are supported, including CSV (flat table), JSON-OCEL and XML-OCEL
(described in the site http://www.ocel-standard.org/).
Parameters
-----------------
ocel
Object-centric event log
file_path
Path at which the object-centric event log should be stored
objects_path
(Optional, only used in CSV exporter) Path where the objects dataframe should be stored
"""
if file_path.lower().endswith("csv"):
from pm4py.objects.ocel.exporter.csv import exporter as csv_exporter
return csv_exporter.apply(ocel, file_path, objects_path=objects_path)
elif file_path.lower().endswith("jsonocel"):
from pm4py.objects.ocel.exporter.jsonocel import exporter as jsonocel_exporter
return jsonocel_exporter.apply(ocel, file_path)
elif file_path.lower().endswith("xmlocel"):
from pm4py.objects.ocel.exporter.xmlocel import exporter as xmlocel_exporter
return xmlocel_exporter.apply(ocel, file_path)