Skip to content

Latest commit

 

History

History
139 lines (115 loc) · 8.02 KB

File metadata and controls

139 lines (115 loc) · 8.02 KB

Changelog

Unreleased

  • Optimal alignments (conformance::alignments):
    • align_log / align_projection / align_trace / align_empty_trace compute cost-optimal alignments via Dijkstra over a synchronous product net
    • compute_fitness derives log/trace fitness for pre-computed alignments
    • Configurable AlignmentOptions (CostFunction, max_states)
    • Exposed as bindings
  • Generic, reusable state-space search in utils::dijkstra_search (SearchProblem trait + search)
  • register_binding macro accepts slice arguments (&[T] extracted as Vec<T>)

0.5.6

  • Translate a ProcessTree into a PetriNet:
    • ProcessTree::to_petri_net returns a workflow net with initial and final marking set
    • add_to_petri_net on Node / Operator / Leaf for recursive insertion into an existing net
    • From<ProcessTree> for PetriNet
  • Bump MSRV to 1.88
  • Update dependencies (pin cxx-build to match kuzu's cxx, refresh cargo deny license allowlist)
  • Add Criterion + dhat benchmarks for event log import (+ DataFrame conversion)

0.5.5

  • SlimLinkedOCEL and bindings:
    • add_event / add_object pad or truncate attributes to the declared length with a warning, instead of causing out-of-bounds panics later
    • add_e2o / add_o2o / delete_e2o / delete_o2o return bool; invalid indices warn and return false instead of panicking
    • Multiple qualifiers between the same (event, object) or (from, to) pair are kept, and reverse lookups return every qualifier
    • fat_ev / fat_ob fall back to Null / empty attribute on missing positional values
    • Drop unwrap()s on unknown type names in reverse-type lookups
    • Expanded docstrings on slim_ocel_bindings for the auto-generated Python API docs
  • Importable / Exportable for SlimLinkedOCEL aligned with the OCEL versions
  • OCEL import/export supports .gz for all formats
  • Better defaults for OCEL 2.0 CSV export

0.5.4

  • Add stream_xes_bufread function for streaming XES traces from a BufRead (supports gzipped input)
  • Remove noisy println! in OCEL XML import for extended OCELs

0.5.3

  • Parse XES version from log element
  • Fix some missing unescapes in XML-based imports (XES, PNML)

0.5.2

  • New analysis module with reusable analysis functions (also exposed as bindings ;))
    • analysis::case_centric::dotted_chart: Configurable multi-axis dotted chart generation (DottedChartOptions)
    • analysis::case_centric::event_timestamp_histogram: Aggregate event timestamps into bins grouped by activity (EventTimestampOptions)
    • analysis::object_centric::object_attribute_changes: Extract time-stamped attribute change history for an OCEL object

0.5.1

  • Rename bindings function for SlimLinkedOCEL bindings (not breaking, as 0.5.0 bindings were not published yet)

0.5.0

  • Fix SlimLinkedOCEL addObject function (previously did not correctly expand the reverse E2O/O2O reference array)
  • Change error type of OCEL XML import to OCELIOError (Breaking), return error if XML does not contain any event or object types
    • Added related test (test_xes_as_ocel_xml_import) to ensure xes files are not correctly imported as OCEL
  • Implement Default for SlimLinkedOCEL, add new function for SlimLinkedOCEL
  • Expose SlimLinkedOCEL binding functions (e.g., for adding events/objects, getting relations, etc.)
  • Implement From<...> for (bi-directional) conversion between (XES) AttributeValues to OCELAttributeValues
  • Remove Hash derive from OCELType (Breaking)

0.4.4

  • Fix version mismatch in macros crate

0.4.3

  • Fix: typo in function name: oc_declare_conformace -> oc_declare_conformance (Breaking)

0.4.2

  • New OCEL CSV Format
    • Added CSV format support for OCEL:
    • Added Importer/Exporter for CSV OCEL file format
    • Added CSV file format to OCEL io trait + known formats (as .ocel.csv)
  • Bindings Improvements:
    • Exposed OC-DECLARE conformance function (oc_declare_conformace) to bindings
    • Renamed discover_oc-declare binding to discover_oc_declare (Breaking for Bindings)
    • Renamed discover_dfg_from_locel to discover_dfg_from_ocel (Breaking)
    • Added SlimLinkedOCEL <-> OCEL conversion support in bindings
    • Implemented LinkedOCELAccess trait support in bindings macro for more generic functions
    • Added ocel_type_stats binding to compute event/object type statistics
    • Exposed flatten_ocel_on function to bindings for flattening OCEL on object types
    • Exposed add_init_exit_events_to_ocel function to bindings
  • Other Fixes and Improvements:
    • Fixed SQLite/DuckDB export to remove existing file before export (prevents UNIQUE constraint errors)
    • Combined/Deduped timestamp-related parsing functionality across files
    • Implemented Null as default OCELAttributeValue
  • Internal Improvements:
    • Updated rusqlite and related dependencies
    • Improved CLI in r4pm

Breaking Changes / Migration Guide

  • The From<OCELAttributeValue> implementation for OCELAttributeType was removed. Instead, use the get_type function on OCELAttributeValue to retrieve its type.
  • Updates related to io module for CSV parsing (e.g., new error variant in OCELIOError)
  • Renamed binding discover_oc-declare to discover_oc_declare

0.4.1

  • Added verbose option to XESImportOptions, defaulting to true
    • Note: Technically this is a breaking change, however the recommended way to use XESImportOptions is non-exhaustive with default fallback:
      • e.g., XESImportOptions {verbose: false, ..Default::default()}

0.4.0

Restructuring (Current)

  • Unified IO Traits: Introduced Importable and Exportable traits in process_mining::core::io to standardize import and export operations across different data structures.
  • EventLog IO: Implemented Importable and Exportable for EventLog, supporting JSON (.json), XES (.xes), and Gzipped XES (.xes.gz) formats.
  • PetriNet IO: Implemented Importable and Exportable for PetriNet, supporting PNML (.pnml) format.
  • OCEL IO: Implemented Importable and Exportable for Object-Centric Event Logs (OCEL), including support for SQLite and DuckDB (if features enabled).
  • Format Inference: Added automatic format inference based on file extensions (e.g., .xes, .xes.gz, .pnml).
  • Auto-Bindings: Added auto-binding functionality to facilitate Python bindings generation.
  • Module Restructuring:
    • Moved Alpha+++ discovery to process_mining::discovery.
    • Moved Petri nets to process_mining::core::process_models.
    • Moved DFG discovery to process_mining::discovery.
  • API Simplification: Users can now use generic import_from_path and export_to_path methods. These methods now strictly rely on file extension for format inference, removing the optional format argument.

Features (Unreleased on crates.io)

  • KuzuDB Support: Added initial support for OCEL export to KuzuDB.
  • DuckDB Support: Added example for OCEL export to DuckDB.
  • Polars Export: Added OCEL to Polars DataFrame export.
  • Object-Centric Process Trees: Added implementation of object-centric process trees and abstraction-based conformance checking.
  • Token-Based Replay: Implemented token-based replay on Petri nets.
  • Incidence Matrices: Added incidence matrices for Petri nets.
  • Event Log Macros: Implemented macros for easier event log creation.
  • OC-DECLARE: Object-centric declarative process models, with discovery and conformance checking.

Changed

  • Exposed Fields: Exposed OCLanguageAbstraction fields.

Migration Guide

  • Importing Event Logs:
    • Old: import_xes_file("log.xes")
    • New: EventLog::import_from_path("log.xes")
  • Exporting Event Logs:
    • New: log.export_to_path("log.xes")
  • Traits: Ensure process_mining::Importable and process_mining::Exportable are in scope if you need to use the traits generically.
  • Format Specification: If you need to specify a format explicitly (e.g., reading from a stream or non-standard extension), use import_from_reader or export_to_writer which still accept a format string.