I'd like to propose adding a backbone extraction subpackage to NetworkX and want to check whether this is suitable for a
NXEP.
Sparsifying a weighted network down to its structurally significant edges is a standard operation in network analysis, but NetworkX currently has no native support for it. Users rely on external packages like
netbone (Yassin et al. 2023, Sci. Rep. 13:17000) or Neal's
backbone R package (2022, PLOS ONE 17:e0269137), or reimplement methods from papers.
The netbone package is particularly relevant here: it's MIT licensed, well-tested, covers 20 methods across statistical, structural, and hybrid categories, and has been validated across 33 real-world networks in a recent comparative study (Yassin et al. 2025, PLOS ONE 20:e0322298).
The proposal is to translate netbone's implementations into a networkx.algorithms.backbone subpackage with a native nx.Graph API, supplemented by bipartite projection and unweighted sparsification methods from Neal's R package. The design separates scoring from filtering: methods store computed scores (p-values, salience, etc.) as edge attributes, and users apply threshold or fraction filters explicitly. Methods that produce a fixed subgraph (metric backbone, MST, PMFG) return the backbone graph directly. The module would also include evaluation measures for comparing backbones, which addresses a practical gap both packages have documented. No dependencies beyond numpy and scipy would be needed.
I have a reference implementation covering 25+ methods with 182 tests passing and would welcome feedback on a few questions.
First, does backbone extraction belong in NetworkX proper, or is it better keep as a standalone package like netbone?
Second, is 20+ methods too broad for an initial proposal, or should I start with a smaller core set?
Third, are there concerns about the scoring-then-filtering pattern as an API convention?
Any guidance on whether and how to proceed with a NXEP would be much appreciated.