Track: Track2; Team name: TJPaik; Model: TopNets#333
Open
TJPaik wants to merge 9 commits into
Open
Conversation
|
Check out this pull request on See visual diffs & provide feedback on Jupyter Notebooks. Powered by ReviewNB |
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
Adds a TDL Challenge 2026 Track 2 implementation for TopNets as
model=combinatorial/topnets.Reference:
Implementation details:
GraphTriangleInducedCCliftingTuneWrapperandPropagateSignalDownso the submitted entrypoint is Track 2 (model_domain: combinatorial)hidden_channels=32, one TopNets layer/step) so the official 72-run grid is feasibletopobench/nn/backbones/graph/topnets.pyas a private graph-neighborhood route helper used by the Track 2 combinatorial backbone, not as a submitted graph-model entrypointgraph/topnetsconfig entrypoint from the PR diffMODEL_CONFIGset tocombinatorial/topnetsValidation:
PYENV_VERSION=TDL python -m pytest test/nn/backbones/graph/test_topnets.py test/nn/backbones/combinatorial/test_topnets.py test/pipeline/test_pipeline.py -q-> 17 passedPYENV_VERSION=TDL python -m pytest test/pipeline/test_pipeline.py -qwith baseline smoke models pluscombinatorial/topnets-> 1 passedmodel_config="combinatorial/topnets"-> all 24 configs passedresults.jsonstatus: committed at2026_tdl_challenge/outputs/topnets/results.jsonwith 72 completed challenge runs across train seeds 42, 43, and 44.results.jsonprovenance: generated from the checked-in2026_tdl_challenge/utils.pyhelpers via CLI withmodel_config="combinatorial/topnets";run_evaluation.ipynbnow sets the sameMODEL_CONFIG.Issue
TDL Challenge 2026 Track 2 model submission for TopNets.
Additional context
Official
results.jsonartifact is included in this PR.This is a TopoBench Track 2 adaptation of TopNets, not an exact reproduction of the official TopNets experiment stack. It uses a portable learned-filtration proxy persistence path and a lightweight challenge config for the official 72-run grid.
Fidelity note
This submission is a TopoBench Track 2 adaptation of TopNets, not a drop-in reproduction of the upstream experiment stack. The reference TopNets graph-classification path uses the RePHINE/TOGL code path and compiled
ph_cpu/rephine_mtkernels to computestandard/rephinepersistence diagrams. In this PR, those kernels are intentionally replaced by an autograd-compatible PyTorch proxy that constructs H0/H1-style persistence pairs from the learned filtration values, so the model can run portably inside the TopoBench/GraphUniverse challenge pipeline without custom compiled extensions.The adaptation preserves the challenge-relevant TopNets route structure: GCN/GIN state evolution, learned filtration MLPs, TOGL-style coordinate transforms, topology feature fusion, and node/topology embedding fusion. It does not claim bit-for-bit or diagram-level equivalence to the upstream RePHINE persistence kernels.
For Track 2, the route operator is applied over TopoBench combinatorial-complex neighborhoods and exposed through
TuneWrapper+PropagateSignalDown. The submitted config is intentionally lightweight (hidden_channels=32, one layer/step,use_dim1=false) for the official 72-run GraphUniverse grid; this is a computational adaptation under the challenge criteria, not a claim of exact upstream hyperparameter reproduction.The committed results use TopoBench's existing
GraphTriangleInducedCCgraph-to-combinatorial lifting withcomplex_dim=3. This lifting is not a clique-complex transform that preserves every structural triangle as a separate 2-cell; the TopNets adaptation runs over the rank neighborhoods produced by that available TopoBench lifting. The lifting may materialize rank-3 cells /incidence_3, but the submitted TopNets path intentionally consumes only ranks 0/1/2 throughselected_dimensions: [0, 1, 2], the configured incidence routes, andPropagateSignalDownwith three cell dimensions. Changing the lifting dimension, adding rank-3 routes, or otherwise consumingincidence_3would change preprocessing/model behavior and would require regeneratingresults.json.use_dim1=falseis the submitted runtime-motivated challenge default. It disables proxy H1/cycle-summary pooling inside the route operator, while keeping H0-style learned-filtration node summaries and higher-order signal through the configured combinatorial incidence routes (down_incidence-1,down_incidence-2,up_incidence-1). The implementation supports the dim-1 proxy path, but the committed 72-run artifact uses the lighter route to keep the official grid feasible; this is a computational Track 2 adaptation, not a full H1-persistence TopNets reproduction for the triangle-counting task.For inter-rank incidence routes (
down_incidence-*/up_incidence-*), destination-cell features are intentionally zero-initialized inside the bipartite route graph, while source-cell features provide the signal into the destination block. The sparse incidence matrices are used only for their nonzero support to build an unweighted bipartite route graph. Incidence values, signs, and weights are not propagated as edge weights on those routes; this is intentional for the submitted Track 2 adaptation and differs from intrarank neighborhoods, where sparse matrix values are passed asedge_weightwhen available. The route output is then sliced back to destination-rank embeddings before TopoBench readout.Note:
topobench/nn/backbones/graph/topnets.pyis a private graph-neighborhood route helper used by the Track 2 combinatorial backbone; it is not a submitted graph-model entrypoint. The only submitted TopNets model config isconfigs/model/combinatorial/topnets.yaml(model=combinatorial/topnets), and this PR intentionally does not addconfigs/model/graph/topnets.yaml.