wikillm

Paper · 2026-08-10 · cs.AI

GENCO - A Unified Neural Solver Embedded in a Development Framework for Steady-State Grid Analysis

GENCO is one graph-transformer solver for flow solving (PF), dispatch optimisation (OPF) and state estimation (SE). It runs N correction steps that decode the grid state, compute power-balance residuals and feed them back. Author-reported: PF mean residuals under 1% of mean apparent power on PFΔ, up to 29x faster than AC-PF at 10k buses, up to 81x faster than AC-OPF.

Graph transformerGraph neural networkPhysics-informed neural networkSurrogate modelingpower-systemsneural-solvergraph-neural-networkphysics-informed

arXivPDFCodeMarkdown15 min read

AI-compiled by claude-haiku-5-5 on 2026-11-05, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

Power grids must be checked constantly: how the electricity flows for a given load (power flow), the cheapest way to dispatch generators without breaking limits (optimal power flow), and what the true grid state is when the sensor readings are noisy or incomplete (state estimation). Classical solvers do these reliably, but they are slow when many scenarios must be checked.

GENCO is a neural network that tries to do all three jobs with one shared design. It treats the grid as a graph of buses and generators. It makes a first guess of the grid state and then corrects it several times. After each guess it works out how much the guess breaks the basic physics of electricity balance, meaning power in must equal power out at every bus. That imbalance is fed back into the network so the next guess can improve. Training pushes the final answer toward solutions from classical solvers and also penalises the imbalance at each step, so the network learns to be physically consistent early.

The authors report that the same model reaches useful accuracy on all three tasks, and that it is much faster than the classical AC solvers on large grids. The speed claims depend on how the comparison is run, so read the Pitfalls section before quoting them. The paper also releases open tooling and datasets for generating grid scenarios and training solvers.

TL;DR

  • One heterogeneous graph-transformer design covers three steady-state tasks on transmission grids: flow solving, dispatch optimisation and state recovery §4.
  • Each of its N correction steps decodes voltages and injections, computes per-bus power-balance residuals, and feeds them back into the latent state §4.2.
  • Author-reported: PF residuals below 1% of mean apparent power on PFΔ; OPF optimality gap at most 0.3% on OPFData; SE that returns an estimate even when WLS fails §5.1–§5.3.
  • Author-reported speed: up to 29x faster than AC-PF at 10k buses; up to 81x faster than AC-OPF (GOC 2000); both amortised and GPU-versus-multi-core §5.4.

Problem

Planning, forecasting, contingency screening and uncertainty studies all solve the same grid model for very many operating points §1. Classical AC solvers (Newton–Raphson for PF, interior-point for OPF, weighted least squares for SE) are reliable but costly at scale. DC approximations are fast but do not give voltage magnitudes or reactive power §1.

Neural solvers so far are usually built for one task, on one grid size and one data distribution. Their evaluations differ in datasets, metrics and hardware, which makes comparisons hard §1, §2. Several reported neural PF models degrade when trained mainly on OPF-feasible states §1.

Method

GENCO is trained per grid and task on precomputed solutions from classical solvers. Its input is a directed graph. Buses and generators are nodes; each branch gives one edge per direction, and a generator is linked to its bus by an edge that carries no features. Unknown quantities are zeroed in the input, and known quantities pass through unchanged §4.1.

Input projection. Separate two-layer networks lift bus, generator and branch features into a latent space of dimension H. Branch embeddings are computed once and held constant over the correction steps §4.1, eq. input_proj.

Correction steps. Each of the N steps does the following §4.2:

  1. A heterogeneous graph-transformer layer with N_h attention heads updates bus and generator embeddings. It uses separate attention parameters for the bus-to-bus, generator-to-bus and bus-to-generator relations. Branch embeddings condition the bus-to-bus attention §4.2.1.
  2. A solution decoder, with weights shared across steps, maps the latent embeddings to voltage magnitudes and angles, plus generator active power for OPF §4.2.2.
  3. For OPF, voltage magnitudes and generator active powers are bounded to their limits with a sigmoid projection. PF and SE get no box constraints §4.2.2.
  4. A physics decoder computes branch flows from the admittance model, sums them to power-flow-implied injections, and for OPF and PF recovers the reactive generation at PV and reference buses from the reactive balance §4.2.2.
  5. Per-bus power-balance residuals are computed for active and reactive power §4.2.3.
  6. A residual encoder maps the residuals into latent space and adds them to the bus embedding before the next layer §4.2.3.

Repeating these steps gives one intermediate solution per step. The final prediction is the last one §4.2, §4.3.

Training loss. The loss is a task-specific supervised term on the final solution, plus a weighted sum of the mean residual norm at every step §4.3:

Pseudocode
# Training loss  [§4.3]
# Supervised term on the final solution plus weighted residual norms
# Inputs: intermediate solutions and residuals for steps 1..N, targets

def training_loss(intermediate, target, num_steps, lam):
    # Supervised term on the final solution  [§4.3]
    final_state = intermediate[-1].state
    loss = supervised_loss(final_state, target)  # MSE (OPF, PF), MAE (SE)
    for step in range(1, num_steps + 1):
        # Weight is lam^(N-i), with lam < 1: larger for later steps  [§4.3]
        weight = lam ** (num_steps - step)
        # Mean over buses of the L2 norm of the residual vector  [§4.3]
        residual_norm = mean_l2(intermediate[step - 1].residuals)
        loss = loss + weight * residual_norm
    return loss
Pseudocode
# GENCO forward pass  [§4.1, §4.2]
# Inputs: grid graph, task masks, number of steps N
# Output: per-step intermediate states and residuals

def genco_forward(grid_graph, masks, num_steps):
    # Project raw features to the latent space  [§4.1]
    bus_latent = bus_projection(grid_graph.bus_features)
    gen_latent = gen_projection(grid_graph.gen_features)
    # Edge embeddings are computed once and held fixed  [§4.1]
    edge_latent = edge_projection(grid_graph.edge_features)
    intermediate = []
    for step in range(num_steps):
        # Message passing; edges condition bus-to-bus attention  [§4.2.1]
        bus_latent, gen_latent = ht_layer(
            bus_latent, gen_latent, edge_latent)
        # Shared solution decoder for the primary variables  [§4.2.2]
        primary = solution_decoder(bus_latent, gen_latent)
        # Sigmoid box projection, OPF only  [§4.2.2]
        primary = bound_with_sigmoid(primary)
        # Physics decoder: flows, injections, recovered Q_g  [§4.2.2]
        state = physics_decoder(primary, masks)
        # Per-bus active and reactive power-balance residuals  [§4.2.3]
        residuals = power_balance_residuals(state)
        # Feedback: add the encoded residuals to the bus latent  [§4.2.3]
        bus_latent = bus_latent + residual_encoder(residuals)
        intermediate.append(StepOutput(state, residuals))
    return intermediate

The residual definition uses the power-flow-implied injection (sum of outgoing branch flows) and the net bus injection (generation minus load), each adjusted by the shunt term at the current voltage §4.2.3. Some residuals are zero by construction, for example reactive power at PV buses, because the generation was recovered from the balance equation §4.2.2, §4.2.3.

Variants. The three sizes differ only in H: Base H=48 (20.1M parameters), Small H=24 (5.0M) and Tiny H=12 (1.3M) §5, intro of Results.

Task definition. For OPF the intermediate solution holds voltages, angles, generator powers, reactive generation and flows. For PF it holds the voltages and angles, the reference-bus active generation, reactive generation and flows. For SE it holds the voltages, angles, bus injections and flows [§4.2.2, eq. intermediate solution in §4.2.2].

Data generation (GridFM-datakit). Load scenarios are obtained by scaling base loads with a global factor from an aggregated profile, times independent per-bus uniform factors on [1−σ, 1+σ] for active and reactive power §3.1. Topology perturbations remove arbitrary N-k branch and generator combinations, with islanding filtered out. Admittances are scaled by random factors. For PF, generator set-points come from an AC-OPF on the base topology, and the N-k outages are then solved without re-dispatch, which produces off-nominal states §3.1, generator setpoints subsection.

Measurement model for SE. SCADA-like measurements are made from true voltage magnitudes, injections and flows, with random masking (p_mask), multiplicative Gaussian noise, and outliers as 3-sigma biases on a fraction p_outlier §5.3. Voltage angles are never measured. Training uses p_mask = 0.2 and p_outlier = 0.1 §5.3.

Hyperparameters

NameValueWhereNotes
hidden dimension H48 (Base), 24 (Small), 12 (Tiny)§5 introOnly difference between variants
parameters20.1M / 5.0M / 1.3M§5 introAuthor-reported
correction steps Nnot stated§4.2Evaluated up to N-20 contingencies, not steps
attention heads N_hnot stated§4.2.1Symbol only
residual weight base λnot stated (λ < 1)§4.3, eq. lossValue needed to reproduce the loss
supervised lossMSE (OPF bus+gen, PF bus); MAE (SE bus+edge)§4.3
optimizer, learning rate, epochs, batch sizenot statedpaperSee Paper vs code
sigmoid box (OPF)voltage magnitude and generator P, bounded by limits§4.2.2Not applied to PF or SE
OPF training set270,000 train / 15,000 val / 15,000 test (90/5/5)§5.2HH-MPNN split, 3 seeds
PF train (PFΔ 118, baseline)54k samples, Tasks 1.3/2.1 (N, N-1, N-2)§5.1, tasks tableData efficiency 3x less: 18k
PF train (Texas 2000-bus)140,000 samples, up to N-2§5.5.180% of 176,415 converged of 200,000 generated
PF test (Texas)9,000 per contingency order, N-1 to N-20§5.5.1Islanded cases removed
SE datasetabout 250,000 scenarios per grid§5.3N-k with k=5 (14/30/57) and k=10 (118)
SE measurement noiseσ_V = 0.01 p.u.; σ_P,Q = 0.02 p.u.§5.3Multiplicative Gaussian
SE outliersbias of 3 std on fraction p_outlier = 0.1 (train)§5.3
SE measurement densityat least 5·|N| measurements§5.3Compared with 4·|N| rule of thumb
SE admittance noisehalf-width σ'_R = σ'_X = 0.2%§5.3Gap in σ_Y swept in figure, value not stated
datakit load noise σnot stated§3.1, eq. scalingSymbol only
pretraining subgrids100 subgrids from 10 PGLib cases, 100–1000 buses§5.5.39,000 PF each, 900,000 scenarios
Hydro-Québec synthetic200,000 samples, 80/10/10§5.6Three seeds
SCADA fine-tune sizes100, 1,000, 10,000, 15,000§5.6Held-out 1,702 samples
IPOPT (benchmark)tolerance 1e-6, max_iter 100, MUMPSapp. CClassical reference solver

Results

Author-reported. Setup: each row is a separately trained model, with values averaged over three seeds where stated. Errors in per-unit (100 MVA base) for PF unless noted §5.1, §5.2, §5.4, §5.6.

Power flow, PFΔ Task 3.1 (trained on IEEE 118, evaluated on 57, 118, GOC 500). Mean power-balance loss in p.u. (table table:all-cases-mean, §5.1). Standard deviation is over three seeds. Newton–Raphson is shown as a reference, not a learning method.

CaseModelNN-1N-2Close-to-infeasible
57GENCO Base4.9e-1 ±1.9e-15.0e-1 ±2.07e-14.8e-1 ±1.7e-15.8e-1 ±2.2e-1
57PFNet2.3 ±0.42.3 ±0.42.3 ±0.42.4 ±0.4
57CANOS-PF1.7 ±0.21.8 ±0.21.8 ±0.21.8 ±0.2
57GNS-S3.3e1 ±1.4e18.8e1 ±3.9e11.5e2 ±0.7e28.0e-1 ±2.0e-1
57NR1.1e-61.2e-61.1e-61.3e-6
118GENCO Base2.7e-3 ±2.1e-34.5e-3 ±3.4e-35.8e-3 ±4.3e-32.2e-1 ±0.8e-1
118PFNet3.4e-1 ±0.08e-14.0e-1 ±0.05e-14.2e-1 ±0.09e-11.1 ±0.03
118CANOS-PF4.0e-2 ±0.4e-25.6e-2 ±0.5e-26.3e-2 ±0.5e-27.2e-1 ±0.9e-1
118GNS-S3.5e-1 ±0.4e-13.8e-1 ±0.4e-13.9e-1 ±0.4e-17.7e-1 ±0.5e-1
118NR3.7e-63.2e-63.3e-64.6e-6
500GENCO Base8.7 ±5.98.7 ±5.98.7 ±5.98.7 ±5.8
500PFNet8.3e1 ±3.9e18.1e1 ±3.8e18.4e1 ±4.0e18.9e1 ±3.8e1
500CANOS-PF2.3e1 ±0.6e12.3e1 ±0.6e12.3e1 ±0.6e12.6e1 ±0.6e1
500GNS-S2.4e1 ±0.7e12.4e1 ±0.7e12.4e1 ±0.7e12.4e1 ±0.7e1
500NR1.4e-51.4e-51.3e-51.6e-5

The PF tasks in the main results (Tasks 1.1–4.3, figure pbl_all_rows_mean, §5.1) are shown only as a figure. The text gives, for the baseline setting (Task 1.3/2.1) on IEEE 118, a mean power-balance loss of 0.28%, 0.53% and 0.69% of mean apparent power for N, N-1 and N-2, with mean apparent powers of 0.95, 0.87 and 0.86 p.u. §5.1. CANOS-PF is the only baseline in single-digit percent (4.2%, 6.4%, 7.3%) §5.1.

Power flow, Texas 2000-bus generalization (§5.5.1–§5.5.2). Trained on N-2 only. Relative bus-level active residuals against DC-PF: GENCO has 2.85x lower median residual for N-1 and 1.5x lower for N-20 §5.5.1. At k=10, the fraction of buses below 1% relative residual is 83.65% for GENCO versus 69.30% for DC-PF; below 1 MW it is 97.69% versus 85.78% (absolute) §5.5.1. Branch loading error for lines at 1.0–1.1 of their limit is 0.004 mean absolute error for GENCO §5.5.2.

Optimal power flow, OPFData (HH-MPNN split). Author-reported. Gap is relative to IPOPT. Feasibility values are mean violations. Std over three seeds [§5.2, table tab:opf_results].

GridModelGap (%)Flow limit + (MVA)Flow limit − (MVA)Active balance (MW)Reactive balance (MVar)Q_g (MVar)
IEEE 14HH-MPNN0.010.000.002.00e-42.70e-20.00
IEEE 14GENCO Base0.05 ±0.010.000.008.27e-4 ±1.13e-43.83e-4 ±5.24e-59.18e-3 ±3.36e-4
IEEE 30HH-MPNN0.185.20e-33.00e-41.31e-27.60e-30.00
IEEE 30GENCO Base0.03 ±0.001.30e-3 ±2.14e-41.28e-3 ±2.05e-41.05e-3 ±7.22e-57.29e-4 ±2.19e-52.68e-3 ±3.03e-4
IEEE 57HH-MPNN0.000.000.002.10e-21.21e-10.00
IEEE 57GENCO Base0.12 ±0.025.01e-7 ±2.66e-71.14e-6 ±1.06e-65.15e-2 ±1.32e-22.98e-2 ±6.67e-31.23e-2 ±4.95e-3
IEEE 118HH-MPNN0.241.37e-11.38e-15.11e-21.99e-10.00
IEEE 118GENCO Base0.16 ±0.024.37e-3 ±7.11e-44.39e-3 ±7.03e-42.19e-2 ±1.31e-25.14e-3 ±2.70e-32.02e-3 ±4.03e-4
GOC 500HH-MPNN0.025.80e-25.60e-21.72e-21.09e-10.00
GOC 500GENCO Base0.30 ±0.041.91e-3 ±2.52e-41.88e-3 ±2.55e-47.02e-2 ±8.35e-32.60e-2 ±1.60e-34.57e-4 ±1.06e-4
GOC 2000HH-MPNN0.002.80e-32.80e-31.03e-22.65e-20.00
GOC 2000GENCO Base0.17 ±0.012.17e-5 ±1.09e-62.45e-5 ±1.43e-65.87e-2 ±6.04e-32.23e-2 ±2.78e-31.64e-3 ±3.33e-4

Author-reported: GENCO's worst mean thermal ratio is 0.0018% of the mean limit (IEEE 118). Its worst active mismatch is 0.176% of mean net active injection (GOC 2000), and its worst reactive mismatch is 0.340% of mean net reactive injection (IEEE 57) §5.2. GENCO Small is reported in the appendix table tab:opf_scaling app. C.

Scaling and runtime (§5.4). Amortised per-instance time, GPU batched inference versus PowerModels on multi-core CPU, with the in-memory protocol. Speedups are author-reported §5.4.2, §5.4.3.

GridGENCO Tiny vs AC-PFDC-PF residual / GENCO residualGENCO Tiny vs DC-PF
140.8x374.0x0.5x
301.5x85.8x0.8x
571.3x56.1x0.6x
1181.8x16.9x0.6x
5002.1x2.49x0.4x
200028.2x1.19x0.5x
1000029.1x0.63x0.6x
GridGENCO Small vs AC-OPFOpt. gap reduction vs DC-OPFViolation reduction vs DC-OPFGENCO Small vs DC-OPF
1415.3x55.2x86.0x3.94x
3025.1x31.8x72.4x4.38x
5727.0x6.28x4.67x4.36x
11849.1x2.85x2.40x4.81x
50057.4x3.20x10.3x6.76x
200081.1x1.85x6.70x5.94x

The PF residual of GENCO Tiny on GOC 2000 and 10000 is about 1 MW, which the paper calls comparable to DC-PF §5.4.2. The from-disk protocol gives smaller small-grid speedups: GENCO Tiny is 0.3x of AC-PF on IEEE 14 app. C.

State estimation (§5.3). Results are figures, not tables. Against weighted least squares (pandapower Gauss–Newton with outlier rejection), GENCO gives a lower median voltage-magnitude error on IEEE 14 and 30 (up to about one order of magnitude). It is less accurate on larger grids. It returns an estimate in every scenario, where WLS fails in some [figure base_case, §5.3]. When grid admittances are perturbed, the gap to WLS widens with the noise level [figure unknown_perturbation, §5.3]. The error ratio on scenarios where WLS does not converge is about 1.11 relative to the converged subset §5.3, app. B.

Hydro-Québec SCADA (§5.6). Mean active power-balance residual on HQ1200 (table tab:hq1200_results, synthetic pretraining, three seeds):

ModelActive [MW]Reactive [MVar]
GENCO Tiny1.1 ±0.30.5 ±0.2
GRIT-HQ3.87 ±0.024.03 ±0.44
DC-PF2.89—

On real SCADA, fine-tuning on 15,000 samples gives 3.36 ±0.05 MW, against 21.1 ±8.4 MW from scratch and 2.90 MW for DC-PF on the same evaluation set §5.6.

Pretrained transfer (§5.5.3). On IEEE 118, the zero-shot pretrained model has an average residual of 11.07 MW against 2.30 MW for DC-PF. With 1,000 grid samples, fine-tuning gives 1.93 MW; training from scratch gives 3.81 MW §5.5.3.

Paper vs code

Compiled from the arXiv v3 LaTeX source (raw/src/2608.09921). Only the authors' organisation (gridfm) was searched. The paper names https://github.com/gridfm/gridfm-graphkit for the model, branch genco-paper-repro (commit 4e7fbcf6aa33… seen on GitHub; not pinned here, see below), and a reproduction guide repository.

  • Code not pinned to a commit. The clone of the default branch (409ff06…) has no GENCO-specific file. The GENCO module was not available as a local clone: a summary of gridfm_graphkit/models/gnn_heterogeneous_gns.py (class GNS_heterogeneous) on genco-paper-repro was read via a web summary, not verbatim. It is not verified that this class is GENCO. No code_commit is set, and no line citations are given.
  • Residual feedback in SE. The paper describes the correction loop for all tasks and restricts SE residuals to measured buses §4.2.3. The summary describes SE as decoding only at the final layer, with no residual feedback and some modules frozen. To verify against the code.
  • Reproduction configs. The reproduction guides in the repository give values the paper does not state, e.g. OPF batch sizes 64 (IEEE), 16 (GOC 500) and 8 (GOC 2000), Texas training with 200 epochs and batch size 4, and PF hidden size 48 for Base. These are not in the paper and were not checked against the YAML files.
  • Dropout in the summary defaults to 0.0 when not set in args. Not checked against the configs.
  • Speed scripts referenced in the guides run AC-PF and AC-OPF through PowerModels on multi-core CPUs, not through the paper's GPU timings directly. Not checked here.
  • Abstract vs tables. The abstract says "up to 85x speedups over IPOPT". The tables give at most 81.1x (GENCO Small vs AC-OPF on GOC 2000) §5.4.3. The discrepancy is not explained in the paper. The card uses the table value.

Pitfalls

  • Speed numbers depend on protocol. The headline 29x and 81x are amortised per-instance times with GENCO on a GPU and PowerModels on up to 84 CPU cores, both at their best batch size or worker count §5.4.1. The paper says earlier benchmarks often used one CPU core. With data loading included (from-disk), GENCO Tiny is 0.3x to 0.4x of AC-PF on IEEE 14 and 30, and is slower than AC-PF on the smaller grids app. C.
  • "30x over Newton–Raphson" in the abstract is GENCO Tiny against PowerModels AC-PF (NLsolve or JuMP), not a generic Newton–Raphson. On grids up to 500 buses, AC-PF is preferred §5.4.2.
  • Q_g and reactive residuals. Reactive generation at PV and reference buses is recovered from the balance equation, so PBRes_Q is zero there by construction [§4.2.2, §4.2.3]. Low PBRes_Q numbers partly reflect this. Q_g is not clipped by a sigmoid, so small generator-limit violations remain (below 0.036% of mean limits) §5.2.
  • Constraints not in the feedback. Only active and reactive power balance enter the feedback. Thermal limits, angle differences and reactive limits are not fed back §4.2.3 footnote. The paper leaves the extension for future work.
  • Residual weight λ and N are not stated. The loss weights cannot be reproduced from the paper alone. The weight is λ^(N−i) with λ < 1 §4.3. Choose λ and N, and say so.
  • Relative vs absolute metrics. PF per-bus residuals on the Texas study exclude buses with zero net injection (about 25% of buses) from the relative metric. Absolute values for those buses are in a separate appendix figure §5.5.1, app. D.
  • Worst-case residuals are large. All methods, including GENCO, have worst-case PF residuals of several times the mean apparent power. The paper calls this an open issue §5.1.
  • Generalisation claims. GENCO was trained on N-2 but evaluated up to N-20 §5.5.1. Zero-shot transfer to unseen grids is poor: 11.07 MW against 2.30 MW for DC-PF §5.5.3. Fine-tuning on roughly 1,000 grid samples is needed to beat DC-PF on a new grid §6.
  • SE baseline advantage. WLS receives the measurement standard deviations. GENCO has to infer the measurement uncertainty from training data §5.3. The SE metric is the median of the bus-averaged mean absolute error, computed only where the WLS Jacobian is full rank §5.3. GENCO's advantage holds on small grids. On larger grids, WLS is more accurate §5.3.
  • Grid parameter errors. GENCO is said to absorb admittance errors because the physics is a soft prior. The paper does not give the σ_Y value used in the figure §5.3.
  • Synthetic-to-real gap. On SCADA, synthetic pretraining is needed. Training from scratch on 15,000 samples gives 21.1 MW §5.6. The paper notes reactive load diversity is lower in datakit data than in HQ SCADA §3.3.
  • Data licenses. The paper uses PFΔ, OPFData and PGLib-based grids. Their licenses are not stated in the paper text and were not checked here. Check each before training on it. The card does not publish data.

Lineage

  • Builds on: heterogeneous graph neural networks and transformer message passing, with the HeteroConv and TransformerConv operators §4.2.1. Physics residual feedback is the authors' own design. The paper cites GRIT for the HQ baseline §5.6.
  • Compared against: GNS-S (Donon et al., 2020) §5.1; CANOS-PF (Piloto et al., 2024) §5.1; PFNet (Lin et al., 2024) §5.1; HH-MPNN (Arowolo et al., 2025) for OPF §5.2; GRIT-HQ for Hydro-Québec §5.6; PowerModels AC-PF, AC-OPF, DC-PF, DC-OPF and Newton–Raphson for runtime §5.4. None of these have cards in this wiki; nothing from their content is used here.
  • Superseded by: not known.
  • Benchmarks used: PFΔ (NeurIPS 2025) and OPFData §3.2. The authors' GridFM datakit generates the scenarios §3.1.

Source and license

Adapted from “GENCO - A Unified Neural Solver Embedded in a Development Framework for Steady-State Grid Analysis” by Alban Puech, Matteo Mazzonelli, Tamara R. Govindasamy, Mangaliso Mngomezulu, Héctor Maeso-García, Thomas Tolhurst, Javad Bayazi, Ali Moeini, Naomi Simumba, Celia Cintas, David Nelischer, Romeo Kienzler, Jonas Weiss, Anna Varbella, Florian Dörfler, Gabriela Hug, Martin Mevissen, Juan Bernabé-Moreno, François Mirallès, Hendrik F. Hamann, Etienne Vos, Thomas Brunschwiler (arXiv:2608.09921), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/gridfm/gridfm-graphkit (Apache-2.0). Any quoted code is shown under that license.