| // CS3319 Project 2 — Key-module dependency graph (Graphviz DOT) |
| // Edges read "A -> B" = A loads B at runtime via importlib load_module() |
| // (no utils.py; sibling scripts reuse each other as modules). |
| // Backbone edges (final stacker -> stage-1 producers) are drawn bold/dark; |
| // shared-library fan-in is drawn light to keep the graph readable. |
| // Verified against the actual load_module() calls in code/ and the project |
| // import map. Only KEY modules are shown (see docs/diagrams/README.md). |
| // Render: dot -Tsvg dependencies.dot -o ../svg/dependencies.svg |
| digraph cs3319_deps { |
| rankdir=TB; |
| bgcolor="white"; |
| fontname="Helvetica"; |
| labelloc="t"; |
| fontsize=16; |
| label="CS3319 — key-module dependency graph (runtime load_module)"; |
| node [fontname="Helvetica", fontsize=11, style="filled,rounded", shape=box, margin="0.12,0.07"]; |
| edge [fontname="Helvetica", fontsize=9]; |
|
|
| // ---------- shared libraries (roots everyone depends on) ---------- |
| subgraph cluster_shared { |
| label="Shared libraries (loaded by ~12 scripts each)"; |
| style="filled,rounded"; color="#dddddd"; fillcolor="#fafafa"; |
| train_val [label="train_val_lgcn_ensemble\n(data · split · best_f1)", fillcolor="#fff4e6", color="#d98c00"]; |
| stack_rank [label="stack_rank_calibration\n(explicit feats · rank)", fillcolor="#fff4e6", color="#d98c00"]; |
| } |
|
|
| // ---------- stage-1 feature / score builders ---------- |
| subgraph cluster_stage1 { |
| label="Stage-1 feature / score builders"; |
| style="filled,rounded"; color="#cfe8d8"; fillcolor="#f4fbf6"; |
| post95 [label="post95_ablation\n(negative evidence)", fillcolor="#eafaf0", color="#1e8449"]; |
| gen_post95 [label="generate_post95_submission\n(variants · top-k)", fillcolor="#eafaf0", color="#1e8449"]; |
| extra [label="extra_score_sources_ablation\n(content · BPR)", fillcolor="#eafaf0", color="#1e8449"]; |
| rw_systematic [label="randomwalk_systematic_ablation\n(7 RW blocks · X_base)", fillcolor="#eafaf0", color="#1e8449"]; |
| content_rich [label="content_rich_ablation\n(rich 18-d)", fillcolor="#eafaf0", color="#1e8449"]; |
| rw_ensemble [label="generate_randomwalk_\nensemble_submission (aggregate)", fillcolor="#eafaf0", color="#1e8449"]; |
| } |
|
|
| // ---------- final stacker ---------- |
| high_order [label="high_order_graph_stack\nFINAL STACKER\n259-d LightGBM · rank cutoff", fillcolor="#fdecea", color="#c0392b", penwidth=2]; |
|
|
| // ---------- peripheral / analysis ---------- |
| subgraph cluster_periph { |
| label="Peripheral / analysis"; |
| style="filled,rounded"; color="#e2e3e5"; fillcolor="#f7f7f9"; |
| node2vec [label="node2vec_deepwalk_ablation", fillcolor="#eef0f3", color="#6c757d"]; |
| error_grp [label="error_group_calibration", fillcolor="#eef0f3", color="#6c757d"]; |
| gen_crich [label="generate_content_rich_submission", fillcolor="#eef0f3", color="#6c757d"]; |
| } |
|
|
| // ---------- backbone: final stacker orchestrates the producers (bold) ---------- |
| edge [color="#1a1a1a", penwidth=1.8, style=bold]; |
| high_order -> rw_systematic; |
| high_order -> content_rich; |
| high_order -> rw_ensemble; |
| high_order -> gen_post95; |
| high_order -> post95; |
| high_order -> extra; |
| high_order -> stack_rank [style=bold, color="#1a1a1a"]; |
|
|
| // ---------- stage-1 inter-dependencies ---------- |
| edge [color="#3a7d4f", penwidth=1.1, style=solid, constraint=true]; |
| gen_post95 -> post95; |
| extra -> gen_post95; extra -> post95; |
| rw_systematic -> gen_post95; rw_systematic -> extra; rw_systematic -> post95; |
| content_rich -> gen_post95; content_rich -> extra; content_rich -> post95; |
| rw_ensemble -> rw_systematic; rw_ensemble -> gen_post95; rw_ensemble -> extra; rw_ensemble -> post95; |
|
|
| // ---------- peripheral ---------- |
| edge [color="#8a8f98", penwidth=1.0, style=dashed]; |
| gen_crich -> content_rich; |
| node2vec -> extra; node2vec -> gen_post95; node2vec -> post95; |
| error_grp -> extra; error_grp -> gen_post95; error_grp -> post95; |
|
|
| // ---------- shared-library fan-in (light, low-rank to avoid hairball) ---------- |
| edge [color="#b0b0b0", penwidth=0.9, style=dotted, arrowhead=vee, constraint=false]; |
| post95 -> stack_rank; post95 -> train_val; |
| gen_post95 -> stack_rank; gen_post95 -> train_val; |
| extra -> stack_rank; extra -> train_val; |
| rw_systematic -> stack_rank; rw_systematic -> train_val; |
| content_rich -> stack_rank; content_rich -> train_val; |
| rw_ensemble -> stack_rank; rw_ensemble -> train_val; |
| gen_crich -> stack_rank; gen_crich -> train_val; |
| node2vec -> stack_rank; node2vec -> train_val; |
| error_grp -> stack_rank; error_grp -> train_val; |
|
|
| // ---------- legend ---------- |
| subgraph cluster_legend { |
| label="Legend"; style="rounded"; color="#cccccc"; fontsize=10; |
| l1 [label="bold dark = final stacker loads producer", shape=plaintext, fillcolor="white"]; |
| l2 [label="solid green = producer reuses producer", shape=plaintext, fillcolor="white"]; |
| l3 [label="dotted grey = loads shared library", shape=plaintext, fillcolor="white"]; |
| l1 -> l2 -> l3 [style=invis]; |
| } |
| } |
|
|