Commit b70a65c5 authored by Andrey Filippov's avatar Andrey Filippov

CLAUDE: test 6 - sky-band root cause reproduced: symmetric-extension crease...

CLAUDE: test 6 - sky-band root cause reproduced: symmetric-extension crease response to LINEAR content

Constant -> exactly 0; ramp 5/row -> 8-row-periodic band pattern
(0,-0.008,-0.297,-0.547,+0.547,+0.297,+0.008,0) = the LOG-01 run's measured sky
bands scaled by the gradient (2.5/row -> -0.14,-0.30,+0.35,+0.16). Pure double
CPU chain -> not float32, not GPU, not a kernel coefficient: pixel LoG of a ramp
is 0 (odd symmetry) but the per-tile symmetric convolution sees the mirrored
extension's slope crease at tile boundaries. Inherent to any per-bin TD multiply
(present under aberration kernels too, masked by content - Andrey's LPF-era
artifact class, confirmed in substance).
Co-Authored-By: 's avatarClaude Fable 5 <noreply@anthropic.com>
parent 7b6d0284
...@@ -531,6 +531,39 @@ public class CuasLogFold { ...@@ -531,6 +531,39 @@ public class CuasLogFold {
" 5: fold-vs-pixel-LoG cross-term residual = %9.3e (predicts full-run A/B floor)", e5)); " 5: fold-vs-pixel-LoG cross-term residual = %9.3e (predicts full-run A/B floor)", e5));
all_pass &= report("5: A/B prediction: folded K*L0 vs pixelLoG(render(K))", e5, 1e-1); all_pass &= report("5: A/B prediction: folded K*L0 vs pixelLoG(render(K))", e5, 1e-1);
// --- test 6: SMOOTH-CONTENT response (the sky-band mechanism, 2026-07-06
// LOG-01 run: folded-vs-pixel-LoG difference = horizontal bands, exactly
// 8-row (tile-pitch) periodic, amplitude ~ local vertical gradient).
// Pixel LoG of constant/ramp is ~0; the folded path's per-tile wrap
// residual is not. Measures the response to each content moment.
{
System.out.println("--- test 6: folded-LoG response to smooth content (pixel LoG of these is ~0)");
double [][] smooth = new double [3][width*height];
String [] snames = {"constant 2000", "ramp 5/row (y)", "quadratic 0.05*y^2"};
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
smooth[0][y*width+x] = 2000.0;
smooth[1][y*width+x] = 5.0 * y;
smooth[2][y*width+x] = 0.05 * y * y;
}
}
for (int t = 0; t < smooth.length; t++) {
double [] out = cltConvolve(imageDtt, smooth[t], width, log_ktile);
double [] orc = pixConvolve(smooth[t], width, log_pix, log_w, false);
int aw6 = width - TRANSFORM_SIZE, half = TRANSFORM_SIZE/2;
// horizontal-mean profile of the difference, one 8-row block mid-image
System.out.print(" "+snames[t]+": diff profile rows 56..71:");
double max_abs = 0;
for (int y = 56; y < 72; y++) {
double s = 0;
for (int x = margin; x < aw6-margin; x++) s += out[y*aw6+x] - orc[(y+half)*width + (x+half)];
s /= (aw6 - 2*margin);
max_abs = Math.max(max_abs, Math.abs(s));
System.out.print(String.format(" %+.3f", s));
}
System.out.println(String.format(" (max|band| = %.3f)", max_abs));
}
}
System.out.println(all_pass? "ALL PASSED" : "FAILURES PRESENT"); System.out.println(all_pass? "ALL PASSED" : "FAILURES PRESENT");
System.exit(all_pass? 0 : 1); System.exit(all_pass? 0 : 1);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment