_static_circles now checks finite center/radius and radius > 0 before build_flag_mask (a negative radius squared to a one-cell solid), matching prepare_fine_boundary. objects is converted to a tuple before the emptiness test so an empty iterable takes the body-free path. CPU tests: negative/NaN radius and nonfinite center rejected before CUDA; empty iterator skips circle preparation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>