Changelog¶
All notable changes to this project will be documented in this file.
This project follows semantic versioning.
[0.3.0] - in preparation¶
API redesign. Same job as 0.2.0: edgelist → sparse PyTorch module → optional Captum attribution. Call sites and return types change.
Upgrade from 0.2.0¶
| 0.2.0 | 0.3.0 |
|---|---|
backend="recurrent" or "graphnn" |
backend="state_update" |
model.recurrent / model.message_passing |
model.state_linear |
interpret_model(..., target=) |
interpret_model(..., on=) |
Captum output index also named target= |
attribute_kwargs={"target": ...} |
interpret_model returned a DataFrame or a dict of tables |
always InterpretationResult |
level= / nodes= / site_aggregation= on interpret_model |
result.summary(nodes=..., aggregation=...) |
site_aggregation="max_abs" |
aggregation="peak" (no alias; keeps the signed score from the step with largest |score|) |
| feature table / node tables | result.table / result.sites |
graph_topology() |
artifact.backend, input_nodes, output_nodes, hidden_nodes, interpretation_sites (feature_names is an alias of input_nodes) |
model.*.weight |
edge_weights(model) (parameters are *.raw_weight; checkpoints from 0.2.0 will not load as-is) |
quiet= |
removed (compile_graph notes go to the edge2torch logger) |
compile_graph(..., backend="feedforward", steps=...) ignored steps |
now raises; omit steps on feedforward (default remains 3 on state_update) |
Catch public failures with from edge2torch import Edge2TorchError.
Changed¶
- Breaking: the state-update summary aggregation
"max_abs"is renamed"peak". The default still keeps the signed score from the step with largest magnitude. There is no"max_abs"alias."last"is also signed; only"mean_abs"drops the sign.
Also¶
- Extra DataFrame columns and AnnData variables are dropped, not errors.
- Omitting
methoduses IntegratedGradients foron="features"and LayerConductance foron="nodes". - Attribution tables store signed Captum scores. Rankings or plots that want
magnitude should call
.abs()themselves.
[0.2.0] - 2026-06-26¶
Added¶
- Node interpretation on all backends. You can now attribute predictions to
named hidden nodes on
recurrentandgraphnnmodels, not only onfeedforward. - Finer control over node attribution output via new
interpret_model()options: level="summary"— one table per sample (default)level="sites"— separate tables per interpretation site (layer_*on feedforward,step_*on recurrent and graphnn)nodes— include hidden nodes only, or also outputs ("non_input"), or all visible nodes ("all")site_aggregation— on recurrent and graphnn, choose how step-wise scores are combined in the summary ("max_abs","mean_abs", or"last")- New example notebooks: recurrent and graphnn end-to-end workflows (compile, train, interpret on cyclic graphs).
- New docs page: Scope and limitations — what each backend supports cleanly, with extra PyTorch work, or not at all.
Changed¶
- Breaking:
interpret_model(..., target="nodes")now returns a summarypandas.DataFrameby default. For the previous per-site dictionary of tables, passlevel="sites".
Fixed¶
- GraphNN example notebook: corrected graph topology so the signal path reaches the readout node as intended.
[0.1.0] - 2026-05-26¶
Added¶
- Initial release of
edge2torch. - Added
compile_graph()for compiling named edge lists into PyTorch models. - Added support for the
feedforward,recurrent, andgraphnnbackends. - Added feature alignment with
align_features_to_input_nodes(). - Added model customization with
customize_model(). - Added Captum-based interpretation with
interpret_model(), including feature-level attribution and feedforward node-level attribution. - Added documentation, examples, and tests.