#![allow(clippy::all, migrated)]
#![allow(dead_code)]
use wasm4pm_compat::causal_net::{
CausalBinding, CausalNet, DependencyMeasure, InputBinding, OutputBinding,
};
struct RegisterOrder;
struct CheckStock;
struct ApproveOrder;
struct ShipOrder;
struct ArchiveCase;
fn demonstrate_causal_net() {
println!("=== CausalNet — top-level graph shape ===\n");
let net = CausalNet::default();
println!(" CausalNet::default() → {:?}", net);
println!(" (structure-only; arc storage and mining graduate to wasm4pm)\n");
}
fn demonstrate_dependency_measure() {
println!("=== DependencyMeasure — causal arc weight ===\n");
let dm_reg_check = DependencyMeasure(0.90);
println!(" RegisterOrder → CheckStock : dm = {:.2}", dm_reg_check.0);
let dm_check_approve = DependencyMeasure(0.75);
println!(
" CheckStock → ApproveOrder : dm = {:.2}",
dm_check_approve.0
);
let dm_check_ship = DependencyMeasure(0.42);
println!(
" CheckStock → ShipOrder : dm = {:.2} (below threshold — arc may be pruned)",
dm_check_ship.0
);
let dm_approve_ship = DependencyMeasure(0.98);
println!(
" ApproveOrder → ShipOrder : dm = {:.2}",
dm_approve_ship.0
);
let dm_ship_archive = DependencyMeasure(0.95);
println!(
" ShipOrder → ArchiveCase : dm = {:.2}",
dm_ship_archive.0
);
println!();
println!(" Law (Weijters & Ribeiro 2011, §2): dm values are in [0, 1].");
println!(" Computation of dm from |a>b|, |b>a|, |a>a| graduates to wasm4pm.\n");
}
fn demonstrate_bindings() {
println!("=== InputBinding and OutputBinding — directed binding edges ===\n");
let ib_reg_check: InputBinding<RegisterOrder, CheckStock> =
InputBinding(RegisterOrder, CheckStock);
println!(" InputBinding<RegisterOrder, CheckStock>");
println!(" → CheckStock requires RegisterOrder predecessor");
let _ = ib_reg_check;
let ib_check_approve: InputBinding<CheckStock, ApproveOrder> =
InputBinding(CheckStock, ApproveOrder);
println!(" InputBinding<CheckStock, ApproveOrder>");
println!(" → ApproveOrder requires CheckStock predecessor");
let _ = ib_check_approve;
println!();
let ob_reg_check: OutputBinding<RegisterOrder, CheckStock> =
OutputBinding(RegisterOrder, CheckStock);
println!(" OutputBinding<RegisterOrder, CheckStock>");
println!(" → RegisterOrder activates CheckStock successor");
let _ = ob_reg_check;
let ob_approve_ship: OutputBinding<ApproveOrder, ShipOrder> =
OutputBinding(ApproveOrder, ShipOrder);
println!(" OutputBinding<ApproveOrder, ShipOrder>");
println!(" → ApproveOrder activates ShipOrder successor");
let _ = ob_approve_ship;
println!();
println!(" Law (Weijters & Ribeiro 2011, §3): binding evaluation — whether");
println!(" the obligated predecessor/successor set is satisfied — graduates to wasm4pm.\n");
}
fn demonstrate_causal_binding() {
println!("=== CausalBinding — unparameterised binding shape ===\n");
let cb = CausalBinding::default();
println!(" CausalBinding::default() → {:?}", cb);
println!(" Use InputBinding<A,B> / OutputBinding<A,B> when arc endpoints");
println!(" are known at compile time. CausalBinding is the general-purpose");
println!(" binding shape for collections or type-erased contexts.\n");
}
fn main() {
println!("=== causal_net_shape example ===\n");
println!("This example demonstrates the structural shapes produced by");
println!("Heuristics Miner (Weijters & Ribeiro 2011). CausalNet, CausalBinding,");
println!("InputBinding, OutputBinding, and DependencyMeasure are the OUTPUT");
println!("SHAPE of Heuristics Miner — not the miner itself.\n");
println!("Mining, dependency-measure computation, and binding evaluation");
println!("all graduate to wasm4pm.\n");
demonstrate_causal_net();
demonstrate_dependency_measure();
demonstrate_bindings();
demonstrate_causal_binding();
println!("=== Example complete ===");
}