The number of sampling steps is yours to choose, which means a sampler has to be able to jump from step 60 straight to step 40 without visiting anything in between. Doing that correctly is the whole trick.
Write for the signal remaining at step , with (nothing destroyed). One jump, from step down to an earlier step , is three moves:
Move 3 is what makes a jump of any size legal: the latent is rebuilt at whatever noise level you asked for, instead of being nudged down by one.
The denoiser here is a toy one, so the arithmetic is reproducible: at step it predicts the noise to be c[t] times whatever latent it is shown, elementwise.
Task: write denoise(x, abar, c, steps), returning the finished result at step 0 as a plain list, rounded to 4 decimal places — and rounded only there, never between jumps.
x is the starting latent, sitting at step steps[0].abar[t] is the signal remaining at step t, and abar[0] is 1.0.c[t] is the toy denoiser's multiplier at step t.steps is strictly decreasing and every entry is at least 1. Visit those steps in order; after the last one, the next stop is step 0.The two visible tests are the same latent and the same schedule, differing only in which steps get visited — and they do not agree. Skipping is an approximation, and the gap between those two answers is the speed-versus-quality dial every diffusion tool puts in front of you.