Skip to main content

Rust-based Process Mining

Project description

r4pm

Python bindings for the Rust4PM Project: Process mining in Python with the speed of Rust

This library provides basic import/export of XES/OCEL event data, as well as other exposed functionality from the Rust4PM project (e.g., process discovery algorithms).

Features

  • Fast XES/OCEL Import/Export: Efficient Rust-based import and export of .xes, .xes.gz, and OCEL2 (.xml/.json) files
  • Auto-Generated Bindings: All process_mining functions automatically exposed with full IDE support (autocomplete, type hints, docs)
  • Registry System: Manage data objects and convert between types as needed
  • Polars DataFrames: Polars facilitates the fast transfer of event data from Python to Rust and vice versa

Installation

pip install r4pm         # default
pip install r4pm-full    # additionally bundles DuckDB (~15 MiB larger)

Both provide the r4pm import package, so install one or the other. r4pm-full adds the DuckDB bindings (stream_ocel_to_duckdb, read_consolidated_ocel_from_duckdb, ...), nothing else differs.

import r4pm

r4pm.__variant__                 # "default" or "full"
r4pm.__features__                # optional features compiled in
r4pm.has_feature("ocel-duckdb")

Quick Start

from r4pm import bindings
import r4pm

# Load an OCEL file - returns a registry ID
ocel_id = r4pm.import_item('OCEL', 'data/orders.xml')

# Convert to SlimLinkedOCEL for analysis functions
locel_id = bindings.slim_link_ocel(ocel=ocel_id)

# Get statistics
num = bindings.num_events(ocel=locel_id)
print(f"Events: {num}")

# Discover object-centric DFG
dfg = bindings.discover_dfg_from_ocel(locel_id)
print(f"Discovered DFG for {len(dfg['object_type_to_dfg'])} object types")

# For case-centric event logs:
log_id = r4pm.import_item('EventLog', 'data/log.xes')
case_dfg = bindings.discover_dfg(log_id)

How It Works

Auto-Generated Bindings

All functions from the process_mining Rust library are automatically discovered and exposed as Python functions with:

  • Full type hints for IDE autocomplete
  • Automatic documentation from Rust docs
  • Type validation via JSON schemas

The bindings are organized by module (mirroring the Rust crate structure):

from r4pm import bindings

# Top-level access to all functions
bindings.discover_dfg(event_log=log_id)
bindings.num_events(ocel=locel_id)

# Or use submodules for organization
from r4pm.bindings.discovery.case_centric import dfg
dfg.discover_dfg(event_log=log_id)

Bindings are automatically generated during the Rust build via build.rs.

Registry System

Data is managed through a registry that holds different object types:

  • OCEL - Raw OCEL data
  • SlimLinkedOCEL - Memory-efficient linked OCEL (required by most functions)
  • IndexLinkedOCEL - Indexed OCEL for analysis
  • EventLog - Case-centric event log
  • EventLogActivityProjection - Activity-projected log for discovery
# Load files into registry
ocel_id = r4pm.import_item('OCEL', 'file.xml')
log_id = r4pm.import_item('EventLog', 'file.xes')

# Convert between types (either like this or using r4pm.convert_item)
locel_id = bindings.index_link_ocel(ocel=ocel_id)
proj_id = bindings.log_to_activity_projection(log=log_id)

# List registry contents
for item in r4pm.list_items():
    print(f"{item['id']}: {item['type']}")

Simple Import/Export API

For direct DataFrame operations without the registry, use the df submodule.

XES

import r4pm

# Import returns (DataFrame, log_attributes_json)
xes, attrs = r4pm.df.import_xes("file.xes", date_format="%Y-%m-%d")
r4pm.df.export_xes(xes, "test_data/output.xes")

OCEL

# Returns dict with DataFrames: events, objects, relations, o2o, object_changes
ocel = r4pm.df.import_ocel("file.xml")
print(ocel['events'].shape)
r4pm.df.export_ocel(ocel, "export.xml")

# PM4Py integration (requires pm4py)
ocel_pm4py = r4pm.df.import_ocel_pm4py("file.xml")
print(ocel['events'].shape)
r4pm.df.export_ocel_pm4py(ocel_pm4py, "export.xml")

Petri Nets & Alignments

A Petri net is a plain JSON-compatible dict (r4pm.petri_net.PetriNet). Import/export PNML, convert to/from PM4Py, and compute alignment-based fitness with the fast Rust alignment implementation.

import pm4py
import r4pm
from r4pm import petri_net
from r4pm.bindings.conformance.case_centric.alignments import align_variants, compute_fitness

LOG = "test_data/Sepsis Cases - Event Log.xes.gz"

# 1. Discover a Petri net with PM4Py (Inductive Miner infrequent, 0.2 noise threshold)
log = pm4py.read_xes(LOG)
net, im, fm = pm4py.discover_petri_net_inductive(log, noise_threshold=0.2)

# 2. Convert the PM4Py net (+ markings) to an r4pm Petri net dict
rnet = petri_net.from_pm4py(net, im, fm)
# petri_net.export_pnml(rnet, "model.pnml")     # write PNML
# rnet = petri_net.import_pnml("model.pnml")    # or read PNML directly

# 3. Load the log into the registry
log_id = r4pm.import_item("EventLog", LOG)

# 4. Align all variants with the Rust binding and compute fitness
#    (the EventLog id is auto-projected to activity variants)
align_res = align_variants(rnet, log_id)
fitness = compute_fitness(align_res, rnet)
print(fitness)
# {'log_fitness': 0.962, 'average_fitness': 0.907,
#  'perfectly_fitting_frac': 0.626, 'total_costs': 573}

Development

Setup

# Install Rust: https://rustup.rs/
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Create virtual environment
python -m venv .venv
source .venv/bin/activate

# Install in development mode
pip install maturin
maturin develop --release

How Bindings Are Generated

Python bindings are automatically generated during the Rust build via build.rs. Thus, bindings are always in sync with the Rust code and do not require manual regeneration.

The build script:

  1. Reads function metadata from the process_mining crate
  2. Generates r4pm/bindings/ with typed Python wrappers and .pyi stubs
  3. Organizes functions by their Rust module structure

Building for Release

maturin build --release  # Creates wheels in target/wheels/

The wheel automatically includes the generated bindings.

Running Tests

# Run comprehensive test suite
python test_all.py

# Run simple example
python example.py

The test suite (test_all.py) covers:

  • Automatic type conversion (positional & keyword arguments)
  • Process discovery (DFG, OC-Declare)
  • Registry operations (CRUD, DataFrames, export)
  • Simple Import/Export DataFrame (df) API
  • Edge cases and conversion caching

LICENSE

This package is licensed under either Apache License Version 2.0 or MIT License at your option.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

r4pm-0.6.1a3.tar.gz (69.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

r4pm-0.6.1a3-cp39-abi3-win_amd64.whl (8.1 MB view details)

Uploaded CPython 3.9+Windows x86-64

r4pm-0.6.1a3-cp39-abi3-musllinux_1_2_x86_64.whl (9.7 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ x86-64

r4pm-0.6.1a3-cp39-abi3-manylinux_2_28_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ x86-64

r4pm-0.6.1a3-cp39-abi3-manylinux_2_28_aarch64.whl (9.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

r4pm-0.6.1a3-cp39-abi3-macosx_11_0_arm64.whl (7.8 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

r4pm-0.6.1a3-cp39-abi3-macosx_10_12_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file r4pm-0.6.1a3.tar.gz.

File metadata

  • Download URL: r4pm-0.6.1a3.tar.gz
  • Upload date:
  • Size: 69.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for r4pm-0.6.1a3.tar.gz
Algorithm Hash digest
SHA256 7dadf5c1d3b33144bcc25ead334dc4494f162c0feb30eb6aa8dc52c6f6ce2641
MD5 abe119a529beda60287ec62a31467b0d
BLAKE2b-256 4b3841e43c475974366886dc12338428071c3a874d4b68ea67188488f5df8ec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm-0.6.1a3.tar.gz:

Publisher: CI.yml on aarkue/r4pm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file r4pm-0.6.1a3-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: r4pm-0.6.1a3-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 8.1 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for r4pm-0.6.1a3-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5e6fea22de47cded33f0820e375c12b0759ffa29b10b06d870acbda6b2f037f4
MD5 58a92fc7950fcf2034498c9dcd35bc47
BLAKE2b-256 91abfca2a5b7c345f6991261bb621acf142915c2f9994db79aca2390cc288f64

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm-0.6.1a3-cp39-abi3-win_amd64.whl:

Publisher: CI.yml on aarkue/r4pm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file r4pm-0.6.1a3-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for r4pm-0.6.1a3-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 03f8c93ea2604424b45457b2537b9d0e58540ab3dc905d1800af6ec977d31c9d
MD5 ac87389f9fef51c962354cabed7b146b
BLAKE2b-256 2b8c1f14a144517815d902fe3e675b6063bd6043f142fee2843e78d7e45080e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm-0.6.1a3-cp39-abi3-musllinux_1_2_x86_64.whl:

Publisher: CI.yml on aarkue/r4pm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file r4pm-0.6.1a3-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for r4pm-0.6.1a3-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 afb3292691cb0ad315be30fc265fca8909b9c5603a332a7433fa2a8656ab7e52
MD5 74054a378c04ca81e1b207fef55fc6e1
BLAKE2b-256 070b2e4ee736c97fbe6fa34beb24a1a36719d40145c2181df74655e0cb92dc74

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm-0.6.1a3-cp39-abi3-manylinux_2_28_x86_64.whl:

Publisher: CI.yml on aarkue/r4pm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file r4pm-0.6.1a3-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for r4pm-0.6.1a3-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7d62c3fbb3349273d6cddd3ef85dd90e6064abdac75abb3021f1fd8f8d6789b9
MD5 d18b1b95003b52b145fdeb5e20e21023
BLAKE2b-256 69b7f250676e927fd3bdba963e957e89586fb9828e441b2b88e91a87dcb5c386

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm-0.6.1a3-cp39-abi3-manylinux_2_28_aarch64.whl:

Publisher: CI.yml on aarkue/r4pm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file r4pm-0.6.1a3-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for r4pm-0.6.1a3-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72e7c3927f0ed8d4ec4ae64fc3ac88eeb13501fb7b679db406426ddf3e017b31
MD5 ff2b7fb7f4d9b7b7defcef223ad8a41c
BLAKE2b-256 051f1402af0dffb34095ec26dc3a96ba66d0bd752712eafcbff0c20465958741

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm-0.6.1a3-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: CI.yml on aarkue/r4pm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file r4pm-0.6.1a3-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for r4pm-0.6.1a3-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 624e622b1d13c7419ee66fa9c1e472f8ae6f8a618fe897269e46f005acf93a66
MD5 ffc07ad52d0d9e4c63e3e23f8f34c35d
BLAKE2b-256 6577fdbad017184fae7d25197ccf0110b00bc4dfa2a8d858b3e338e2b12d29cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm-0.6.1a3-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: CI.yml on aarkue/r4pm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page