feat: implement ConvolutionalNeuralOperator (CNO) (closes #122) - #134
jitendravjh wants to merge 4 commits into
Conversation
d81efeb to
e2ded64
Compare
|
Missing tests |
|
Added |
8b1a961 to
a759fbd
Compare
Verdict: changes needed before merge (reviewed at Adds an exported ConvolutionalNeuralOperator, forward/gradient tests, and a separate GridEmbedding device-placement change. Changes are required because the proposed resampling does not implement the cited CNO's filtering guarantees, the new export breaks documentation checks, and API-ownership/versioning requirements remain unmet. Risk assessment
Local commands, from the scratch directory, with GROUP=Core timeout 7200 ~/.juliaup/bin/julia +1.12 --project=repo -e 'using Pkg; Pkg.test()'
# Fourier Neural Operator 14/14; DeepONet 10/10; NOMAD 10/10;
# Convolutional Neural Operator 8/8; SpectralConv 12/12;
# SpectralKernel 14/14; Transform Interface 15/15; Precompile workload 3/3.
# Testing NeuralOperators tests passed
GROUP=QA timeout 7200 ~/.juliaup/bin/julia +1.12 --project=repo -e 'using Pkg; Pkg.test()'
# Some tests did not pass: 20 passed, 1 failed, 0 errored, 0 broken.
# Evaluated: isempty([:ConvolutionalNeuralOperator])Runic command: An additional Core run with CI failures, checked using the actual failed-job logs:
All other reported head checks passed, including formatting and spelling. The default-branch failures above were compared through CI logs, not reproduced locally. Findings
Read the PR description, both conversation comments, all inline comments/reviews (none), and the linked feature issue; Chris requested tests and the author subsequently added them. No other maintainer is reviewing this PR. The additional issue referenced by the GridEmbedding edit was also read. Push a fix and the PR is reviewed again automatically at the new head. 🤖 Posted by an AI agent — harness: Claude Code · model: claude-opus-5-5[1m] (fleet master); review by Codex CLI 0.157.1 / gpt-6-astra |
Implements the Convolutional Neural Operator from: Raonic et al., "Convolutional Neural Operators for robust and accurate learning of PDEs", NeurIPS 2023. https://arxiv.org/abs/2302.01178 Architecture: - Lifting: Conv(1x...x1): in_channels → hidden_channels - CNO blocks: Upsample(:bilinear) → Conv(3x...x3, act, SamePad) → MeanPool - Projection: Conv(1x...x1, act) → Conv(1x...x1): → out_channels Each CNOBlock upsamples by upsample_factor, convolves at higher resolution, then downsamples via MeanPool — ensuring the operator converges to a continuous limit as spatial resolution increases (resolution-invariant). New types exported: - ConvolutionalNeuralOperator (the full model) - CNOBlock (the building block, composable) Closes SciML#122
a759fbd to
2c5e733
Compare
2c5e733 to
a674d40
Compare
Replace bilinear upsampling and mean pooling with band-limited FFT resampling around the activation, following the paper's activation operator, and use the same filtered activation in the projection. Add an aliasing check and a spectral resampling test.
Implements CNO from Raonic et al., NeurIPS 2023 (https://arxiv.org/abs/2302.01178).
Each
CNOBlockis a 3x3 convolution followed by the paper's activation operator: band limited upsample, activation, then low pass on the way back. Resampling goes through the FFT so inputs are treated as periodic, same as the Fourier layers. The projection uses the same filtered activation.API matches
FourierNeuralOperator(modes, in_ch, out_ch, hidden_ch; ...).Checklist