Track: Track2; Team name: TripleA; Model: TopoU-Net - #372
Open
amiiiza wants to merge 10 commits into
Open
Conversation
added 7 commits
July 8, 2026 02:03
|
Bugbot is not enabled for this team, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Bugbot is not enabled for this team, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Checklist
Description
This PR implements TopoU-Net -- "TopoU-Net: A U-Net Architecture for Topological Domains" (arXiv:2605.10091) -- as a Track 2 (TNN) submission for the TDL Challenge 2026.
TopoU-Net is a U-shaped encoder–decoder over the ranked cells of a combinatorial complex. Given an increasing encoder rank path
S = (s_0 < … < s_L), the encoder transports cochains upward along incidence matrices, a bottleneck map is applied at ranks_L, and the decoder transports features back down, merging encoder and decoder states at matched ranks through skip connections. Rank traversal replaces spatial scale: the rank path is the central architectural hyperparameter.Provenance. No official implementation of the paper has been released (checked July 2026). The implementation follows the paper's equations directly, and every docstring cites the specific section it implements:
T↑(H) = σ(B̄ᵀ H W↑),T↓(G) = σ(B̄ G W↓)-- §3.2, §3.5Φ, Ψ(pointwise MLPs, the canonical choice) and bottleneckΩ-- Definition 3.3, §3.5D_{s_i} = σ((E_{s_i} + D̃_{s_i}) W^m_i), with ause_skipflag reproducing the no-skip ablation -- §3.5, §4.6.3aggr_norm) --§3.2B_{s_i,s_{i+1}}for rank-skipping path steps, realized as the binarized product of consecutive incidence matrices -- §3.5Permutation equivariance (Proposition 3.5) and structural compatibility of the decoder states (Proposition 3.4) are covered by dedicated unit tests.
Model variants (one config per rank path, per challenge rules)
combinatorial/topounet(default)[0, 1, 2]combinatorial/topounet_edge[0, 1]combinatorial/topounet_global[0, 1, 2, 3]All variants share the same backbone class; only
encoder_rank_pathand the lifting'scomplex_dim/add_global_celldiffer.What is contributed
New modules
Backbone --
topobench/nn/backbones/combinatorial/topounet.pyTopoUNet(torch.nn.Module); auto-discovered byModelExportsManager. Takes per-rank cochains and the consecutive sparse incidence matricesB_{r-1,r}that TopoBench already computes. Handles empty ranks gracefully (e.g. triangle-free graphs), in which case the skip connections carry the signal -- mirroring the paper's motivation for skips under severe bottleneck compression (Proposition 3.6).Lifting --
topobench/transforms/liftings/graph2combinatorial/triangle_global_cc.pyGraphTriangleGlobalCC: nodes (rank 0), edges (rank 1), triangles as maximal 3-cliques (rank 2, §4), and optionally a single global rank-3 cell incident to all triangles (Appendix B.4), realized as the all-nodes set so thatB_{2,3}is a column of ones. The global cell is only added when triangles exist, which keeps active ranks consecutive as required by TopoBench's connectivity extraction. Reusable by any future combinatorial model.Wrapper --
topobench/nn/wrappers/combinatorial/topounet_wrapper.pyThin
AbstractWrappersubclass routingx_0andincidence_1..incidence_{s_L}into the backbone and exposing the decoder states of every path rank to the readout.Reused TopoBench components (no modification needed)
AllCellFeatureEncoder(rank 0 only -- per Definition 3.3, TopoU-Net consumes a single input cochain at ranks_0; higher-rank states are computed by the encoder itself)ProjectionSumfeature lifting,NoReadOutreadout (the decoder already returns the signal to rank 0; graph-level tasks use global mean pooling per §4.2)Configs
configs/model/combinatorial/topounet{,_edge,_global}.yaml-- fullTBModelcomposition (feature_encoder / backbone / backbone_wrapper / readout)configs/transforms/liftings/graph2combinatorial/topounet_cc{,_edge,_global}.yaml-- lifting parameters per variantconfigs/transforms/model_defaults/topounet{,_edge,_global}.yaml-- attach the correct lifting automatically whenever the model is run on a graph dataset (same mechanism asnsd/hopse)Faithfulness notes (allowed modifications)
ProjectionSum(sum over the boundary via|Bᵀ|); the paper initializes the global cell by mean pooling of triangle features (App. B.4). Withaggr_norm: truethe backbone's own transports average over incident cells, matching the paper's normalized-incidence option (§3.2). These seeded features are not consumed by the backbone (Definition 3.3 takes input only at ranks_0).nx.find_cliques), literally following "triangles as maximal 3-cliques" (§4) and matching the convention of the existingGraphTriangleInducedCClifting.Testing
test/nn/backbones/combinatorial/test_topounet.py-- 12 tests: forward shapes for all three rank paths (Prop. 3.4), permutation equivariance (Prop. 3.5), no-skip ablation (§4.6.3), degree normalization, direct-incidence rank skipping (§3.5), empty-rank handling, input validation, repr.test/nn/wrappers/combinatorial/test_topounet_wrapper.py-- wrapper output contract, with and without residual connections.test/transforms/liftings/graph2combinatorial/test_triangle_global_cc.py-- triangle cells, global-cell incidence (all-onesB_{2,3}), triangle-free graphs, edge-only complex, feature lifting.test/pipeline/test_pipeline.pyfilled in withgraph/MUTAG× all three variants -- full training pipeline passes end-to-end.ruffandnumpydocvalidation pass on all new files.Evaluation
2026_tdl_challenge/run_evaluation.ipynbrun oncombinatorial/topounet; the generatedresults.jsonis included in this PR.Reproducing