[NumPy-Tickets] [NumPy] #1441: rollaxis() has confusing error messages and should maybe interpret negative start argument differently

NumPy Trac numpy-tickets@scipy....
Tue Sep 21 14:24:47 CDT 2010

#1441: rollaxis() has confusing error messages and should maybe interpret negative
start argument differently
 Reporter:  kbasye      |       Owner:  somebody      
     Type:  defect      |      Status:  needs_decision
 Priority:  normal      |   Milestone:  Unscheduled   
Component:  numpy.core  |     Version:                
 Keywords:              |  

Comment(by kbasye):

 Replying to [comment:1 rgommers]:
 > The documentation in your proposed new version for "start" is actually
 consistent only with the current behavior. I found rollaxis confusing at
 first too, but when I read the docstring now it makes sense.

 I assume you are referring to the sentence describing the semantics of the
 'start' argument: "The axis is rolled until it lies before this position."

 I actually don't think this is worded very well; I'd prefer 'at' rather
 than 'before'.  Assuming that the positions of the shape are numbered
 starting with 0 (which is how the 'axis' argument works), then, as the
 first example shows, using a 'start' value of 1 rolls the specified axis
 until it lies *at* position 1.  To me, 'before' position 1 would have to
 mean 'at' position 0, which isn't what happens.  And with that change, the
 interpretation of '-1' for 'start' should mean the last position, which is
 how my change would work.

 I suppose one reading that would make the current version correct is "The
 axis is rolled until it lies before <<the axis currently at>> this
 position" - in which case you're correct that it doesn't accurately
 describe the new behavior I propose.  But then I don't think there is any
 good way to describe moving something to the last position (as in the
 third example), since there's no current axis at position 4 to be 'before'
 (as it were), which seems like another reason to prefer the 'at' version.

 > Either way, since you're proposing to modify existing behavior, the
 correct place to discuss this on the mailing list. Since it will break a
 lot of existing code I don't think there's a lot of chance this gets
 accepted though.

 Yeah, I know.  I'm somewhat tempted to see if folks would go for the
 addition of moveaxis() which would work this way.  Calling this function
 'rollaxis' seems sort of odd, given that only one axis moves - compare the
 roll() function, which really does roll in the usual register sense.  BTW,
 all this came up because it seemed like there really should be a better
 way to get the first (or any other axis) into the last position than doing
 np.rollaxis(a, axis, len(a.shape)) but right now I don't think there is.
 I'll float it on the list and see what happens.

 > Your extra examples and more accurate error message should be included I
 think even if the proposed change is rejected.

 I'd settle for that.

 And thanks for replying!

Ticket URL: <http://projects.scipy.org/numpy/ticket/1441#comment:2>
NumPy <http://projects.scipy.org/numpy>
My example project

More information about the NumPy-Tickets mailing list