I have taken a look at the code, and I think I have identified the bug. I'm not sure this is the most appropriate place to suggest a modification; if not, I hope someone can forward this to the right address, or at least tell me where to post it.
Here are some tests showing the issue: sage: w=Word([0,0,1,0,2,1]); w word: 001021 sage: w.conjugate(-1) #a conjugate is just a cyclic shift word: 100102 sage: w.conjugate(5) #cyclic shifts are defined modulo the length word: 100102 #conjugate_position correctly shows here how much you need to shift w to get its 0th conjugate (itself) sage: w.conjugate(0).conjugate_position(w) 0 sage: w.conjugate(1).conjugate_position(w) 1 # in general, for primitive words (i.e., non-powers) such as w, the result of # w.conjugate(n).conjugate_position(w) # should always equal n % w.length(): sage: w.conjugate(-2).conjugate_position(w) 4 sage: w.conjugate(-1).conjugate_position(w) #so here the output should be 5, but... sage: w.conjugate(-1).conjugate_position(w) is None #oops! True sage: v=Word('abacabac'); v #the square of 'abac', a non-primitive word word: abacabac #the following computation is right; the bug only appears when the expected answer is length-1 #so non-primitive words always work fine. sage: v.conjugate(-1).conjugate_position(v) 3 ________ Here is the current version of the code: def conjugate_position(self, other): r""" Returns the position where self is conjugate with other. Returns None if there is no such position. EXAMPLES:: sage: Word('12113').conjugate_position(Word('31211')) 1 sage: Word('12131').conjugate_position(Word('12113')) is None True sage: Word().conjugate_position(Word('123')) is None True """ if self.length() != other.length(): return None if self == other: return 0 for l in xrange(1, other.length() - 1): other = other.conjugate(1) if self == other: return l return None I believe that in order to fix this bug, it is sufficient to substitute line -5, i.e., for l in xrange(1, other.length() - 1): with the following for l in xrange(1, other.length()): I hope I have made myself clear. Thanks again, bye Alessandro On 21 Mar, 09:35, "Nicolas M. Thiery" <nicolas.thi...@u-psud.fr> wrote: > Hi Alessandro, > > On Sun, Mar 20, 2011 at 05:48:22PM -0700, Alessandro De Luca wrote: > > I am writing because the conjugate_position method (for finite words) > > is not working the way I expected. I believe that the output for > > > w.conjugate(-1).conjugate_position(w) > > > should equal w.length()-1 for all words w on at least two letters. > > However, I seem to get no answer, all the time (just as if the two > > words were not conjugate). All other positions, apart from -1, seem to > > work just fine. > > I'm running the latest Sage version, 4.6.2. > > I don't know what the right thing should be here. But please include > examples with the obtained output and the output you'd expect: > > sage: w = ... > sage.conjugate(-1).conjugate_position(w) > ... > > Whatever is the conclusion of the discussion, those should be added to > the documentation with an explanation; so this is not wasted time, and > it makes things concrete. > > Thanks! > Nicolas > -- > Nicolas M. Thi�ry "Isil" <nthi...@users.sf.net>http://Nicolas.Thiery.name/ -- You received this message because you are subscribed to the Google Groups "sage-combinat-devel" group. To post to this group, send email to sage-combinat-devel@googlegroups.com. To unsubscribe from this group, send email to sage-combinat-devel+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sage-combinat-devel?hl=en.