rust4pm

Rust4PM: Rust for Process Mining. See also the example applications at https://github.com/aarkue/rust4pm_demos.

https://github.com/aarkue/rust4pm

Science Score: 36.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
    1 of 2 committers (50.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (14.4%) to scientific vocabulary

Keywords

data-science process-mining processmining
Last synced: 6 months ago · JSON representation

Repository

Rust4PM: Rust for Process Mining. See also the example applications at https://github.com/aarkue/rust4pm_demos.

Basic Info
Statistics
  • Stars: 14
  • Watchers: 1
  • Forks: 6
  • Open Issues: 7
  • Releases: 0
Topics
data-science process-mining processmining
Created over 2 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

Rust4PM

process_mining Rust Crate

Crates.io Downloads Documentation

This repository is a mono-repo containing the following parts: - process_mining/ Process Mining library in Rust (See also https://crates.io/crates/processmining) - `pythonbridge/Python Bindings -javabridge/Java Bindings -pmwasm/WASM / JavaScript Bindings PoC -binary/` Rust Binary Executable

For more information on the process_mining Rust library, see process_mining/README.md. \ Further information is also available at https://crates.io/crates/processmining and https://docs.rs/processmining.


Setup and Project Structure

The Java, Python and JavaScript bindings make use of the main process_mining library, which is written in Rust. Thus, complex algorithms or logic can be implemented only once in Rust. This implementation can then be exposed and used from Java, Python or JavaScript, in different enviroments. This not only reduces implementation effort (write only once, use everywhere), but also enables great performance.

Figure showcasing that one main Rust implementation can be used from Java, Python, or other languages.

Additional information, as well as evaluation results, are published in a written report titled Developing a High-Performance Process Mining Library with Java and Python Bindings in Rust.

Mostly, cargo is used to build and run this project. For more detailed instructions see https://github.com/aarkue/rust-bridge-template, which provides more details on how to build or run this and similar projects.

If you are looking for the Rust-based XES event log importer, see https://github.com/aarkue/rustxes, which contains the XES importer from process_mining/ extracted to its own crate with full Python bindings.

If you are interested in a starter kit template to bootstrap similar Rust libraries with Java and Python bindings, see https://github.com/aarkue/rust-bridge-template.

There you will find more information on how to get started, as well as build and run such projects.

Main Rust Library (process_mining)

process_mining is a collection of functions, structs and utilitities related to Process Mining.

See process_mining/README.md to view the dedicated README for the process_mining Rust library.

Further information is also available at https://crates.io/crates/processmining and https://docs.rs/processmining.

Bindings

Here you can find some preliminary information about the binding implementations. For more details, please take a look at the source code or the full written report.

Java

  • Uses jni to allow Java code to call shared Rust library
  • Object Passing:
    • byte[] JSON-encoded data [faster]
    • Writing File to disk (containing JSON-encoded data)
  • Required Java libraries:
    • gson for efficient JSON encoding/decoding

Python

  • Uses maturin with the corresponding PyO3 FFI Bindings
  • Can pass dicts and other types rather easily; but slow for larger data
  • JSON-encoding/decoding possible (using faster orjson), but still no great passing performance
    • bytes encoding/decoding e.g., Event Logs is implemented__
  • Polars: Allows converting PM4Py's pandas DataFrame to a Polars DataFrame; Can then easily be used on Rust side
    • But: Requires Polars dependency (also in python!)

WASM Proof of Concept

  • pm_wasm/ contains a proof of concept of WASM bindings for the main library, e.g., exposed to JavaScript and executed in the browser.
  • First building with wasm-pack build --target web --release
  • The PoC frontend uses React with vite. The dev server can be started with npm run dev.
  • Multithreading (using wasm-bindgen-rayon) is currently not used, but might be enabled again in the future.

A live demo is available at https://wasm.siter.eu/.

Example XES -> Alpha+++ Discovery | Example OCEL2.0 XML Import :-------------------------:|:-------------------------: image | image

LICENSE

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

Owner

  • Name: Aaron
  • Login: aarkue
  • Kind: user
  • Location: Germany
  • Company: RWTH Aachen University

GitHub Events

Total
  • Create event: 11
  • Issues event: 2
  • Watch event: 7
  • Delete event: 7
  • Member event: 3
  • Issue comment event: 5
  • Push event: 70
  • Pull request review comment event: 26
  • Pull request review event: 15
  • Pull request event: 24
  • Fork event: 5
Last Year
  • Create event: 11
  • Issues event: 2
  • Watch event: 7
  • Delete event: 7
  • Member event: 3
  • Issue comment event: 5
  • Push event: 70
  • Pull request review comment event: 26
  • Pull request review event: 15
  • Pull request event: 24
  • Fork event: 5

Committers

Last synced: 8 months ago

All Time
  • Total Commits: 321
  • Total Committers: 2
  • Avg Commits per committer: 160.5
  • Development Distribution Score (DDS): 0.093
Past Year
  • Commits: 100
  • Committers: 2
  • Avg Commits per committer: 50.0
  • Development Distribution Score (DDS): 0.3
Top Committers
Name Email Commits
aarkue m****l@a****u 291
cRennert c****t@r****e 30
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 7
  • Total pull requests: 29
  • Average time to close issues: about 2 months
  • Average time to close pull requests: 12 days
  • Total issue authors: 2
  • Total pull request authors: 4
  • Average comments per issue: 0.71
  • Average comments per pull request: 0.17
  • Merged pull requests: 23
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 3
  • Pull requests: 24
  • Average time to close issues: N/A
  • Average time to close pull requests: 15 days
  • Issue authors: 1
  • Pull request authors: 4
  • Average comments per issue: 0.33
  • Average comments per pull request: 0.21
  • Merged pull requests: 18
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • aarkue (4)
  • EduardoGoulart1 (1)
Pull Request Authors
  • cRennert (18)
  • aarkue (13)
  • erikwrede (2)
  • cpitsch (1)
Top Labels
Issue Labels
enhancement (1)
Pull Request Labels

Dependencies

Cargo.lock cargo
  • 218 dependencies
Cargo.toml cargo
binary/Cargo.toml cargo
java_bridge/Cargo.toml cargo
pm_wasm/Cargo.toml cargo
process_mining/Cargo.toml cargo
python_bridge/Cargo.toml cargo
pm_wasm/package-lock.json npm
  • @esbuild/aix-ppc64 0.19.10 development
  • @esbuild/android-arm 0.19.10 development
  • @esbuild/android-arm64 0.19.10 development
  • @esbuild/android-x64 0.19.10 development
  • @esbuild/darwin-arm64 0.19.10 development
  • @esbuild/darwin-x64 0.19.10 development
  • @esbuild/freebsd-arm64 0.19.10 development
  • @esbuild/freebsd-x64 0.19.10 development
  • @esbuild/linux-arm 0.19.10 development
  • @esbuild/linux-arm64 0.19.10 development
  • @esbuild/linux-ia32 0.19.10 development
  • @esbuild/linux-loong64 0.19.10 development
  • @esbuild/linux-mips64el 0.19.10 development
  • @esbuild/linux-ppc64 0.19.10 development
  • @esbuild/linux-riscv64 0.19.10 development
  • @esbuild/linux-s390x 0.19.10 development
  • @esbuild/linux-x64 0.19.10 development
  • @esbuild/netbsd-x64 0.19.10 development
  • @esbuild/openbsd-x64 0.19.10 development
  • @esbuild/sunos-x64 0.19.10 development
  • @esbuild/win32-arm64 0.19.10 development
  • @esbuild/win32-ia32 0.19.10 development
  • @esbuild/win32-x64 0.19.10 development
  • @rollup/rollup-android-arm-eabi 4.9.1 development
  • @rollup/rollup-android-arm64 4.9.1 development
  • @rollup/rollup-darwin-arm64 4.9.1 development
  • @rollup/rollup-darwin-x64 4.9.1 development
  • @rollup/rollup-linux-arm-gnueabihf 4.9.1 development
  • @rollup/rollup-linux-arm64-gnu 4.9.1 development
  • @rollup/rollup-linux-arm64-musl 4.9.1 development
  • @rollup/rollup-linux-riscv64-gnu 4.9.1 development
  • @rollup/rollup-linux-x64-gnu 4.9.1 development
  • @rollup/rollup-linux-x64-musl 4.9.1 development
  • @rollup/rollup-win32-arm64-msvc 4.9.1 development
  • @rollup/rollup-win32-ia32-msvc 4.9.1 development
  • @rollup/rollup-win32-x64-msvc 4.9.1 development
  • @types/node 20.9.0 development
  • detect-libc 1.0.3 development
  • esbuild 0.19.10 development
  • fsevents 2.3.3 development
  • lightningcss 1.22.1 development
  • lightningcss-darwin-arm64 1.22.1 development
  • lightningcss-darwin-x64 1.22.1 development
  • lightningcss-freebsd-x64 1.22.1 development
  • lightningcss-linux-arm-gnueabihf 1.22.1 development
  • lightningcss-linux-arm64-gnu 1.22.1 development
  • lightningcss-linux-arm64-musl 1.22.1 development
  • lightningcss-linux-x64-gnu 1.22.1 development
  • lightningcss-linux-x64-musl 1.22.1 development
  • lightningcss-win32-x64-msvc 1.22.1 development
  • nanoid 3.3.7 development
  • picocolors 1.0.0 development
  • postcss 8.4.32 development
  • rollup 4.9.1 development
  • source-map-js 1.0.2 development
  • typescript 5.3.3 development
  • undici-types 5.26.5 development
  • vite 5.0.10 development
  • comlink 4.4.1
pm_wasm/package.json npm
  • typescript ^5.3.3 development
  • vite ^5.0.4 development
  • comlink ^4.4.1
python_bridge/pyproject.toml pypi