SILVA Case Atlas
This atlas maps every SILVA case family in the package and companion book to the equation, public API, input tensors, and diagnostics. It is the safest place to decide what to run before opening a notebook or experiment config.
The numbered lineage begins with SILVA [1] and DEQ [4]; the specialized cases below link to graph, operator, optimization, multiscale, and optical-flow sources as their claims require.
For a deeper equation-to-source audit of each case, see Implementation Derivations. For a full method-to-paper audit, see Research Citation Audit.
Coverage Map
| Case | Status in package | Main API | Core tensors |
|---|---|---|---|
| Scalar and toy DEQ | Implemented | fixed_point, DEQLayer, educational NumPy helpers |
z0, callable f |
| Generic entity SILVA | Implemented | SILVALayer, SILVAStack |
x, optional edge_index, edge_attr, batch |
| Graph/node SILVA | Implemented | SILVAGraphLayer, SILVAGraphNetwork, SILVAGraphPresetNetwork |
x, edge_index, optional batch |
| Graph-level prediction | Implemented | SILVAGraphNetwork(task="graph"), pool_entities |
x, edge_index, batch, y |
| Vision vector SILVA | Implemented | SILVAVisionVectorLayer, SILVAVisionVectorClassifier |
image vectors or flattened image tensors |
| Convolutional vision SILVA | Implemented | SILVAConvStem, SILVAConvVisionClassifier |
(batch, channels, height, width) |
| Molecular SILVA | Implemented | SILVAMolecularLayer, SILVAMolecularRegressor |
atom features, bond edges, bond features, molecule batch |
| Dataset adaptation | Implemented | GraphTensorBatch, tabular_to_silva_graph, image and molecular adapters |
x, edge_index, edge_attr, batch, y |
| Diagnostics and failure modes | Implemented | residual_curve, stability_report, solve_with_energy |
transition f, state z, optional energy |
| General DEQ engine | Implemented | SILVADEQEngine, silva_deq, pack_state, unpack_state |
tensor, tuple, or list state |
| SILVA DEQ flow | Implemented | SILVADEQFlow, silva_deq_flow, silva_flow_warp, silva_all_pairs_correlation |
image pair, flow field, validity mask |
| ODE trajectories and implicit time steps | Implemented | SILVAEulerFlowBlock, SILVAImplicitTimeStep |
vector or sampled field, optional context |
| PDE fields and residuals | Implemented | finite-difference operators, SILVAReactionDiffusionRHS2D, SILVABurgersRHS1D, poisson_residual_2d |
1D or 2D sampled fields |
| Learned solution operators | Implemented | SILVAOperatorModel, SILVAFourierNeuralOperator |
source, coefficient, coordinate, boundary, or initial-condition channels |
| Irregular graph PDEs | Implemented through public composition | SILVACortexLayer with a graph local field |
node state, edge_index, optional geometry in edge_attr |
| Path sums and interaction histories | Documented and notebook-facing | solvers, Jacobian helpers, examples | linearized transitions |
| Homotopy, distributional, algorithmic, and quantum cases | Book extension material | notebooks and user-defined DEQLayer/SILVALayer |
custom states and residuals |
Citation Map by Case
| Case | Cite |
|---|---|
| Scalar and toy DEQ | SILVA package; Deep Equilibrium Models; Deep Implicit Layers tutorial |
| Generic entity SILVA | SILVA paper/package; DEQ for the equilibrium-layer framing |
| Graph/node SILVA | SILVA; DEQ; GCN, GAT, or MPNN depending on the local branch |
| Graph-level prediction | SILVA; Deep Sets for mean/sum/max set pooling when discussing permutation-invariant graph readouts |
| Vision vector SILVA | SILVA; Attention Is All You Need for channel attention; Dynamic Graph CNN as related dynamic-kNN literature |
| Convolutional vision SILVA | SILVA; cite the convolutional benchmark/dataset used; attention/dynamic-kNN papers if those branches are discussed |
| Molecular SILVA | SILVA; Neural Message Passing for Quantum Chemistry; Graph Attention Networks; dataset or molecular benchmark source |
| Dataset adaptation | dataset source; SILVA package for the adapter; Dynamic Graph CNN when reporting kNN graph construction as a dynamic graph method |
| Jacobian regularization / stability | Hutchinson trace estimator; Jacobian-regularized DEQ; DEQ/implicit-layer sources |
| ODE / optimization / MDEQ bridge | Neural ODEs, OptNet, Differentiable Convex Optimization Layers, MDEQ, as applicable |
| Neural operators and PDE learning | Fourier Neural Operator; Neural Operator; SILVA for the structured equilibrium construction |
| General DEQ engine | SILVA package; TorchDEQ; DEQ |
| Optical flow DEQ | RAFT; Deep Equilibrium Optical Flow Estimation; SILVA package |
Universal Contract
Every implemented case reduces to
The executed damped solver step is
The package's structured SILVA field is
The branch meanings are:
| Branch | Role | Typical implementation |
|---|---|---|
| \(S_\theta\) | inject external stimulus into the recurrent state dimension | affine map, convolutional stem, atom embedding |
| \(H_\theta\) | optional learned self-interaction inside the transition | SelfInteraction, IdentityTerm, custom module |
| \(L_\theta\) | local exchange between nearby entities | graph aggregation, GAT, kNN, channel kNN |
| \(G_\theta\) | global context shared inside a set, graph, molecule, or sample | mean field, gated mean, top-k attention, channel attention |
| \(\Phi\) | output block for the next recurrent state | tanh plus norm, LayerNorm(ReLU(...)), or case-specific block |
Scalar and Toy DEQ Case
Use this case to verify the mechanics before adding graph structure.
The Jacobian is
With a scalar affine map \(f(z)=az+m\), the exact equilibrium is
Use:
from silva_networks import SolverConfig, fixed_point
result = fixed_point(f, z0, SolverConfig(alpha=0.5, max_iter=25))
Evidence to record:
| Diagnostic | Equation | API |
|---|---|---|
| residual | \(\|f(z_k)-z_k\|_2\) | result.residuals |
| Jacobian | \(J_f(z^\star)\) | full_jacobian |
| local stability | \(\rho((1-\alpha)I+\alpha J_f)\) | damped_spectral_radius |
Generic Entity SILVA Case
SILVALayer treats rows as exchangeable entities:
The default transition is
Use this case when your entities are neither image pixels nor molecules but can still be represented as rows.
from silva_networks import SILVALayer, SolverConfig
layer = SILVALayer(
in_dim=features,
hidden_dim=64,
local="topk",
global_term="simple",
self_term="linear",
local_kwargs={"k": 8},
config=SolverConfig(solver="anderson", alpha=0.4, max_iter=15),
)
Graph and Node Case
Graph SILVA has one row per node:
The reference graph layer computes
The local mean branch is
The graph-attention branch is
Use:
from silva_networks import SILVAGraphPresetNetwork
model = SILVAGraphPresetNetwork(
in_dim=num_features,
hidden_dim=[64, 48],
out_dim=num_classes,
task="node",
graph_mode="GAT",
attention_mode="simple",
stack_alphas=[0.5, 0.2],
)
Graph-Level Prediction Case
Graph prediction uses the same equilibrium state, then pools node states:
Mean pooling is
Use:
model = SILVAGraphNetwork(
in_dim=num_features,
hidden_dims=[64, 64],
out_dim=num_targets,
task="graph",
pooling="mean",
)
Global Context Cases
Mean-field global context is the simplest permutation-invariant case:
The gated SILVA-style variant is
Top-k global attention restores receiver-specific global context:
Vision Vector Case
Vector vision treats hidden channels as the interacting entities inside each sample. For a batch of flattened inputs,
The transition is
Dynamic channel local interaction builds a kNN graph over channel values:
Per-sample channel attention computes
No information crosses from one image in the batch to another image.
Use:
from silva_networks import SILVAVisionVectorClassifier
model = SILVAVisionVectorClassifier(
in_dim=28 * 28,
hidden_dim=[128, 64],
num_classes=10,
attention_mode="simple",
graph_mode="knn",
alphas=(0.5, 0.2),
)
Convolutional Vision Case
The convolutional case first extracts a vector stimulus:
then sends it to the same vector SILVA equilibrium stack:
Use:
from silva_networks import SILVAConvVisionClassifier
model = SILVAConvVisionClassifier(
in_channels=3,
image_size=32,
hidden_dim=[128, 64],
num_classes=10,
alphas=(0.5, 0.2),
)
Molecular Case
Molecular SILVA has atoms as entities, bonds as edges, and molecules as batch groups:
Each layer computes
The molecule state is pooled for regression:
Use:
from silva_networks import SILVAMolecularRegressor
model = SILVAMolecularRegressor(
hidden_dim=[128, 64],
atom_feature_dim=atom_features.shape[1],
bond_feature_dim=bond_features.shape[1],
alphas=(0.5, 0.2),
)
Dataset Adaptation Cases
The package has one tensor contract:
Tabular data becomes a sample graph by standardizing features and connecting nearest neighbors:
Pixel graph images use grid neighbors. Molecules preserve bond edges. PyG-like
objects are represented as GraphTensorBatch values without requiring PyTorch
Geometric as a package dependency.
Scientific ODE, PDE, and Operator Cases
The scientific surface separates finite trajectories, implicit numerical steps, and learned function maps:
| Goal | Equation | Main API |
|---|---|---|
| finite ODE trajectory | \(h_{k+1}=h_k+\Delta t\,v(h_k,t_k,x)\) | SILVAEulerFlowBlock |
| implicit ODE/PDE step | \(u^{n+1}=u^n+\Delta t\,R_h(u^{n+1},c)\) | SILVAImplicitTimeStep |
| learned solution operator | \(\widehat u=\mathcal G_\theta(a,q,g,\Omega)\) | SILVAOperatorModel |
| Fourier equilibrium operator | \(z^\star=\Psi[R_\phi(a)+B_{\mathrm{FNO}}(z^\star)+\cdots]\) | SILVAFourierNeuralOperator |
| irregular graph PDE | \(z_i^{n+1}=z_i^n+\Delta t D\sum_{j\to i}(z_j^{n+1}-z_i^{n+1})\) | graph module in SILVACortexLayer.local_terms |
For a semidiscrete right-hand side \(R_h\), backward Euler defines the fixed-point map
SILVAImplicitTimeStep sends this map through solve_equilibrium, so the
configured forward and backward modes, residual tracking, and convergence flag
remain available. Built-in fields cover reaction-diffusion and viscous Burgers;
custom nn.Module fields can implement another discretization while preserving
the (state, context) -> state-shaped field contract.
For source-to-solution learning, the sampled tensor contract is
Input channels can represent coefficients, forcing, coordinates, masks, initial data, or boundary values. The operator model lifts them, solves one SILVA point, and applies a readout. Use the scientific residual helpers to check derivatives, Poisson residuals, and boundaries independently from the fixed-point residual.
Validation evidence should include task or field error, solver residual, physical residual, boundary error, iteration count, gradients, and resolution or mesh transfer when those claims are made. The complete derivations are in Neural Operators, ODEs, PDEs, and SILVA.
Path-Sum and Linear Response Case
Near an equilibrium, write the damped linearized update as
Repeated substitution gives the finite response
When \(\rho(T)<1\),
This is the "interaction history" view: local and global operators contribute through repeated powers of the linearized transition.
Diagnostics and Failure Cases
A result is not trustworthy from task accuracy alone. Record:
| Quantity | Equation | API |
|---|---|---|
| residual | \(\|f(z_K)-z_K\|_2\) | SolverResult.residual |
| residual curve | \((\|r_1\|,\dots,\|r_K\|)\) | residual_curve |
| damped radius | \(\rho((1-\alpha)I+\alpha J_f)\) | damped_spectral_radius |
| Jacobian norm | \(\|J_f\|_F\) estimate | hutchinson_jacobian_norm |
| energy trend | \(E_{k+1}-E_k\) | solve_with_energy, energy_deltas |
| descent share | fraction of nonincreasing energy steps | descent_fraction |
Common failure modes:
| Symptom | Likely issue | First check |
|---|---|---|
| Residual plateaus high | solver budget too small or map too expansive | reduce alpha, increase max_iter, inspect \(\rho\) |
| Residual oscillates | damping too aggressive | lower alpha or try Anderson with ridge |
| Full Jacobian is too large | state is not a toy state | switch to VJP/JVP diagnostics |
| Batch leakage | global term ignored batch |
validate batch and use package global operators |
| Edge mismatch | edge_attr rows do not match edges |
GraphTensorBatch.validate() |
Book Extension Cases
The companion book includes additional research routes. The package can host
them through custom DEQLayer or custom SILVA operators, but they are not
advertised as prebuilt classes unless a public API exists.
| Book route | Fixed-point form | Package entry point |
|---|---|---|
| Extended neural operators and PDEs | multi-point, geometry-specific, or custom-basis operator equilibria | SILVAOperatorModel, SILVAImplicitTimeStep, or custom DEQLayer |
| Homotopy and continuation | \(F(z^\star(t),t)=0\) | continuation loop around fixed_point |
| TorchDEQ and DeltaDEQ engineering | solver interface and heterogeneous convergence | compare against SolverConfig and solver traces |
| Certified and Lipschitz DEQs | \(\|(I-J_f)^{-1}\|\) sensitivity bounds | jvp, vjp, spectral diagnostics |
| Score and diffusion equilibria | \(s^\star=f_\theta(s^\star,x,t)\) | custom transition |
| Extended scientific self-consistency | \(H^\star=\mathcal H_\theta(H^\star,x)\) beyond the built-in field cases | scientific APIs or custom transition plus diagnostics |
| Recent theory and finite-solve bias | \(z_K-z^\star\) and local claims | residual curves and stability reports |
| Distributional DEQs | empirical measure or particle fixed point | SILVALayer with permutation-equivariant branches |
| Algorithmic and quantum reasoning | Bellman or circuit self-consistency | custom DEQLayer |
The rule for all extension cases is the same: state the residual, show the solver trace, inspect the linearization, and make only the claim supported by those diagnostics.
Where to Go Next
| Question | Page |
|---|---|
| How do I select among these model families? | Selecting Model Families |
| How are research architectures represented in SILVA? | Paper Family Adaptations |
| Where are the runnable cases? | Examples |