On Wed, Dec 26, 2018 at 10:31 PM Simon King <simon.k...@uni-jena.de> wrote:
>
> Hi Dima,
>
> On 2018-12-26, Dima Pasechnik <dimp...@gmail.com> wrote:
> > E.g. do not do
> >
> > G = libgap('DihedralGroup(8)')
> >
> > instead do
> >
> > G = libgap.DihedralGroup(8)
>
> Sure, that's what I do. I also used to do gap.DihedralGroup(8), which works
> just as well. I just chose an example to point out that the two call methods
> have a different semantics.
>
> >>     sage: L = gap('[1,2,3]')
> >>     sage: L[1]
> >>     1
> >
> > this is guaranteed constant headache, leading to madness or more
> > likely abandonment and bitrot, having in Python list-like 1-based
> > objects,
> > next to normal 0-based objects... Pythonisti fed  devs to hungry serpents 
> > for
> > lesser degrees of non-Pythonness...
>
> Sure. I am saying that GAP did a wrong choice, and arguably it was a bad 
> choice
> in gap to follow GAP's convention. libgap being 0-based is good!
>
> However, it means libgap cannot be a drop-in replacement for gap, and
> the change from gap to libgap will, for some time, create trouble for
> users. So, one cannot just remove gap all of a sudden, in particular not
> without a deprecation. And the same should hold for r.

Certainly, a period of deprecation will be needed, I agree here.

>
> >> - libgap.__call__ on a string does not interprete that string but
> >>   returns a GAP string.
> >
> > I don't understand - you get a Python wrapper to a GAP object if you
> > call libgap appropriately,
> > not a string.
>
> No. See the examples I gave. libgap('bla') gives GAP string (which of
> course is my abbreviation for "Python wrapper of a GAP string").
> gap('bla') tries to evaluate 'bla' as a command.
>
> Similarly to the above 1- versus 0-based, I am saying that libgap
> arguably works better than gap (so, please don't change libgap now!).
> But again, it means a headache for users and thus removing gap and
> replacing it with libgap must not happen without a deprecation.
>
> > I'd like to have a look at this code: perhaps half, if not all, of 
> > libgap.eval()
> > calls can be replaced by something more Pythonic.
>
> Currently I use it for the following purposes:
>
> 1. Creating examples in the doc strings. Reason: I simply don't know
>    how to express the GAP command
>       Group( [ (1,2)(3,8)(4,6)(5,7), (1,3)(2,5)(4,7)(6,8) ] )
>    in libgap. I tried
>    libgap.Group( [ ((1,2),(3,8),(4,6),(5,7)), ((1,3),(2,5),(4,7),(6,8)) ] )
>    but it fails.

What are these permutations, type-wise? Are they Sage permutations, or
just strings?
The following works:

sage: G=PermutationGroup( [ ((1,2),(3,8),(4,6),(5,7)),
((1,3),(2,5),(4,7),(6,8)) ] )
sage: libgap(G)
Group([ (1,2)(3,8)(4,6)(5,7), (1,3)(2,5)(4,7)(6,8) ])

Unfortunately PermutationGroup(libgap(G)) does not currently work, one
needs to dig deeper,
to the level of generators. This ought to be fixed.

Also, currently this is done via strings, and there should be a much
better way to exchange Sage's and GAP's permutations available, on C
level. It's quite doable with libgap, but needs work.



> 2. Testing if a construction fails, by a comparison such as
>         if phi == libgap.eval('fail')...
>    I would prefer "if phi == libgap.fail...", but it fails.
> 3. Calling GAP's `InstallValue`. I tried to do it via
>    libgap.function_factory, but without success.

Isn't it there already?

sage: libgap.set_global('bla',[1,2])
sage: libgap.get_global('bla')
[ 1, 2 ]

> 4. Pickling. GAP has, as far as I can see, very poor support for
>    serialisation. In my application, I am dealing with permutation
>    groups, that can be reconstructed from their string representation.
>    So, I store this and do unpickling by libgap.eval(...).
>    I would be happy to learn of more efficient ways of pickling a group]

With IO package  (which already seems to work with new libgap, just needs
a bit of extra work, hopefully done this week, see
https://trac.sagemath.org/ticket/26930)
https://www.gap-system.org/Manuals/pkg/io-4.5.4/doc/chap5.html#X81BBA46880EBFC7D

(I never used it myself, so YMMV)

Cheers,
Dima


>    in GAP, but for backwards compatibility (opening old pickles) I need to 
> keep
>    evaluating strings.
>
> Best regards,
> Simon
>
> --
> You received this message because you are subscribed to the Google Groups 
> "sage-devel" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sage-devel+unsubscr...@googlegroups.com.
> To post to this group, send email to sage-devel@googlegroups.com.
> Visit this group at https://groups.google.com/group/sage-devel.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to