Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

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.

Download files

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

Source Distribution

r4pm_full-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_full-0.6.1a3-cp39-abi3-win_amd64.whl (17.9 MB view details)

Uploaded CPython 3.9+Windows x86-64

r4pm_full-0.6.1a3-cp39-abi3-musllinux_1_2_x86_64.whl (31.6 MB view details)

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

r4pm_full-0.6.1a3-cp39-abi3-manylinux_2_28_x86_64.whl (24.2 MB view details)

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

r4pm_full-0.6.1a3-cp39-abi3-manylinux_2_28_aarch64.whl (23.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

r4pm_full-0.6.1a3-cp39-abi3-macosx_11_0_arm64.whl (20.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

r4pm_full-0.6.1a3-cp39-abi3-macosx_10_12_x86_64.whl (21.1 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: r4pm_full-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_full-0.6.1a3.tar.gz
Algorithm Hash digest
SHA256 6e28ff1cd1907dfb188ceeb16c3f783aeb50ea5efeee2cda070b0fafc8894f95
MD5 db0bc46af9ad9062f5641e54d08e8314
BLAKE2b-256 bf5320ea8a35eeaf8fb97521c0abf96a41203d278ac3b3c858d97b567cd9dde5

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm_full-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_full-0.6.1a3-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: r4pm_full-0.6.1a3-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 17.9 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_full-0.6.1a3-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 366c35b8fa1ed665a9f3cc0aea3773385a1e0a4617ba79e8c18d32cc2ca3a754
MD5 3a9e45294a24a6cad948edfcb9f6921f
BLAKE2b-256 328982dc610e146df10e2f6ebd86ccad42502dcf992ced353b66e5b4e7c24d7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm_full-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_full-0.6.1a3-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for r4pm_full-0.6.1a3-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ba42088bfd48a04c18af5b6b7ebf9154611617c598dea00d66988388393e439b
MD5 ca2d6fdea2f3cc67bdc4d80d905d1241
BLAKE2b-256 cd41a32a74005e96c1ecb18a9485e4020964054cf95ece35244252529f9a91e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm_full-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_full-0.6.1a3-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for r4pm_full-0.6.1a3-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e0d9f6789626d049f57f2e417d3677874c007a6874151f187c32576ae7f7688
MD5 1a099b610122cf8fdf3416c03aa7d89e
BLAKE2b-256 3cdccfd7ff9eb921cd6ad0dd781830cabcda0f56257f9598242cbe08691200f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm_full-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_full-0.6.1a3-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for r4pm_full-0.6.1a3-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 84b1df5278329a57a351325c474aa048abbba08f972a5c30c9e801fd764d75c6
MD5 0b2b88114e349315f9ca1ab66c9e61c2
BLAKE2b-256 6e770851fdc2a6d538ab0b068109ab3519c9ef2d4459c40a00eb86cf116dc8e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm_full-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_full-0.6.1a3-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for r4pm_full-0.6.1a3-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2666f14e4e871a3d6ca2529c04d50cd93a1d819988aaec9418af66a7b0766f5
MD5 904c45c7348b2573f3a38dc79d2612aa
BLAKE2b-256 0744d2151a1f500061ef0e98ae85897ce3e369c2b9b4c7605cc883ee8fde3320

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm_full-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_full-0.6.1a3-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for r4pm_full-0.6.1a3-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b2aae3ed5f1198aa3a10b2eb20f89d4e336d995bd8e9b6cd79a065a7c3814f15
MD5 01430a9dda9c24e4a9d78838e54593bf
BLAKE2b-256 171cb77dc08f89982d3471b4f67ea8bf17fd1a1ed4f0dfad81b0a8c1d413f0cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for r4pm_full-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