You should call pm.draw(results) to see what the scan actually evaluates. The print statements are misleading because pytensor will indeed only call the function once to obtain the symbolic graph. After that it never needs it again as it represented the operation as a Pytensor graph.
But when evaluating it, it will certainly operate on a loop over the outer dimensions of the sequences or nsteps