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.

Reply via email to