Hi, Alessandro!

You're right, someone should have answered to your post before that...
I saw it some time ago but I have been very, very busy lately so that
I didn't take time to answer you.

Are you familiar enough with the trac server to create a ticket
reporting the problem? If so, you can do it, add me in cc and I should
get some time to review it. Otherwise, email me in person (or
Sébastien) so that we can explain you the different steps. This could
be a good opportunity to contribute to Sage. Moreover, the ticket
shouldn't be hard to review.

Alex

On Apr 4, 8:27 am, Alessandro De Luca <alessandro.del...@utu.fi>
wrote:
> Hello,
> it would be nice to get some feedback.
> This bug has consequences on other functions in the combinatorics on
> words package: for instance, you get
>
> sage: Word('abaa').is_conjugate_with(Word('aaba'))
> True
>
> sage: Word('aaba').is_conjugate_with(Word('abaa'))
> False
>
> even though conjugacy is an equivalence relation. Again, the problem
> here is that "-1" mistake in the conjugate_position method. It is just
> a small change, and this group is the only place I know for proposing
> it.
> Thanks
>
>  Alessandro
>
> On 21 Mar, 16:11, Alessandro De Luca <alessandro.del...@utu.fi> wrote:
>
>
>
>
>
>
>
> > 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