Select next ring?

I’m trying to iterate down the edge rings (not loops) of a mesh. So far I’ve tried bpy.ops.mesh.select_next_loop(). It does seem to work properly on the data, but does wierd stuff in the viewport when I play with it.

For example, in edge mode, I will have a nice array of parallel edges, but the operation makes no visual change. Changing to vert mode, the highlighted verts are as they should have been - but its less nice because the edges include the perpendicular edges. CtlTabbing back to edge mode, now the original edges are selected and so is the line of quads which was visible in vert mode.

It looks like this operation works on vert data only but leaves edge data alone.

I just want to select in turn all the parallel edges along each sequential edge ring. Am I taking the wrong approach?
Also tangentially related: is there any way to do something like select_prev_loop?

Is there a clear document on how vert, edge, face data is stored and manipulated? between mesh, bmesh, object, and other considerations, it appears intricately nuanced.

I tried this again to take screenshots, but now it is working differently. This is odd. Will keep experimenting.