graph TD A["๐ฅ Input\nHypergraph"] --> B{"Graph Size\n> 50?"} B -->|"Yes"| C["๐ฆ Coarsen\nMinHash clustering"] C --> D["๐ Recursive\nPartition"] D --> E["๐ค Uncoarsen\nProject down"] E --> F["โก FM\nRefinement"] F --> B B -->|"No"| G["โ Final\nPartition"] style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style G fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style F fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style C fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style B fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#2e3440
graph LR A["๐ Library\nckpttn-cpp"] --> B["๐ฅ๏ธ CLI\n12 flags"] B --> C["๐ Fixed\nModules"] B --> D["๐ฒ Random\nInit"] B --> E["๐ Multi-\nStart"] B --> F["๐ Mode\nFMPartMgr/NN"] A --> G["๐ Python\nckpttnpy"] G --> H["78 tests โ "] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style C fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style D fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style E fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style F fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style G fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#2e3440 style H fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440
graph TD A["๐ฅ Input Hypergraph"] --> S1["Seed 42"] & S2["Seed 42+104729"] & S3["Seed N-1"] S1 --> E1["โก FM Run 0"] --> G["๐ Pick Best"] S2 --> E2["โก FM Run 1"] --> G S3 --> EN["โก FM Run N-1"] --> G G --> H["โ Best Partition"] style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style H fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style G fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style S1 fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style S2 fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style S3 fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440
graph LR A["๐ท๏ธ CLI (12)"] --> B["โ๏ธ Algorithm (10)"] B --> C["๐งฉ Coarsening (4)"] B --> D["๐ฎ Implicit (6)"] A -.->|"9 wired โ "| B A -.->|"3 unwired ๐ด"| B style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style C fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style D fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440
graph TD A["Net degree d"] --> B{"d < 2\nor d โฅ 500?"} B -->|"Yes"| Z["โญ Skip"] B -->|"No"| C{"d = 2?"} C -->|"Yes"| E["โก 2-pin fast"] C -->|"No"| D{"d = 3?"} D -->|"Yes"| H["โก 3-pin path"] D -->|"No"| G["General path"] style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style H fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style G fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#2e3440 style Z fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440
graph TD A["gainmax < 0?"] -->|"PartMgrBase"| B["๐ธ Snapshot\nDefer rollback"] A -->|"NNPartMgr"| C["โ Break\nNo rollback"] B --> D["Continue until\nbucket empty"] C --> E["Return best so far"] style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style C fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440
pie title "Parameter Exposure Status" "Fully Wired (10)" : 10 "Parsed, Not Wired (3)" : 3 "Hardcoded (19)" : 19