On Fri, Dec 14, 2018 at 11:10 AM E. Madison Bray <erik.m.b...@gmail.com> wrote:
>
> On Fri, Dec 14, 2018 at 11:55 AM Dima Pasechnik <dimp...@gmail.com> wrote:
> >
> > On Fri, Dec 14, 2018 at 10:19 AM E. Madison Bray <erik.m.b...@gmail.com> 
> > wrote:
> > >
> > > There is also an existing hard-coded list of function names that are
> > > actually what's used for dir() and tab-completion, completely separate
> > > from this module.  AFAICT this all_documented_functions module isn't
> > > really used anywhere in Sage, and doesn't turn up much in the
> > > documentation.  As Alex  Konovalov pointed out to me, the "example" in
> > > all_documented_functions of doing `from
> > > sage.libs.gaps.all_documented_functions import *` is probably not a
> > > good idea in most cases anyways.  For example:
> > >
> > > sage: DihedralGroup(8)
> > > Dihedral group of order 16 as a permutation group
> > > sage: type(_)
> > > <class 'sage.groups.perm_gps.permgroup_named.DihedralGroup_with_category'>
> > > sage: from sage.libs.gap.all_documented_functions import *
> > > sage: DihedralGroup(8)
> > > <pc group of size 8 with 3 generators>
> > > sage: type(_)
> > > <type 'sage.libs.gap.element.GapElement'>
> > >
> > > Oops, this clobbers multiple existing built-ins in Sage.  Alex also
> > > suggested that using IsDocumentedWord like this was perhaps
> > > ill-considered in the first place.
> > >
> > > Given that it isn't actually used anywhere in Sage, and is not
> > > particularly documented, and mostly seems to cause problems, it would
> > > be best just to remove this?  Does anyone use it?
> >
> > it's used for tab completion and as well for directly calling libgap 
> > functions
> > (otherwise you need to call libgap's function_factory on them):
>
> It isn't though.  You and Volker both seem to be confusing two
> different things, unless I'm missing something.
In all_documented_functions.py you see

for _f in _FUNCTIONS:
    globals()[_f] = libgap.function_factory(_f)

and this is exactly the "function_factorisation" of everything in
sage.libs.gap.gap_functions

So simply removing all_documented_functions.py will break a hell of a
lot of code.

(although there is of course nothing against merging sage.libs.gap.gap_functions
and sage.libs.gap.all_documented_functions - unless I miss something)


>  Grep the sources
> yourself: The module sage.libs.gap.all_documented_functions is not
> referenced anywhere outside of itself:
>
> $ grep -R all_documented_functions src/sage
> src/sage/libs/gap/all_documented_functions.py:    sage: from
> sage.libs.gap.all_documented_functions import *
>
> What *is* used to provide directory/tab-completion is a different
> module called sage.libs.gap.gap_functions, which just contains a
> hard-coded list of strings naming various GAP functions.  In fact I
> recently updated [1] this list because it contained some globals which
> are not functions, as well as a few that no longer exist:
> https://git.sagemath.org/sage.git/commit/?id=60d7eb69ffa7d402495717148879906639324244
>
> Actually, it would be good at least if the list in this module were
> tested to ensure it remains valid.  When I updated it I did something
> like
>
> for name in common_gap_functions:
>     try:
>         func = libgap.eval(name)
>     except Exception as exc:
>         print("{} possibly missing? Error: {}".format(name, exc)
>         continue
>
>     if not IsFunction(func):
>         print("{}: not a function".format(func))
>
>
>
>
> > > On Tue, Dec 11, 2018 at 4:52 PM Volker Braun <vbraun.n...@gmail.com> 
> > > wrote:
> > > >
> > > > This is basically the tab completion list in the Sage/libgap interface. 
> > > > As you found out, creating it on the fly is way too slow. Hence we 
> > > > cache a reasonable list of names.
> > > >
> > > >
> > > >
> > > >
> > > > On Tuesday, December 11, 2018 at 9:52:53 AM UTC-5, E. Madison Bray 
> > > > wrote:
> > > >>
> > > >> In the sage.libs.gap package, in the assigned_names.py module, there
> > > >> is a function called just list_functions() [1] which is documented to
> > > >> "Return the GAP documented global functions".
> > > >>
> > > >> This is used in the all_documented_functions.py [2] module to create
> > > >> Python wrappers for "all documented GAP functions, they can be thought
> > > >> of as the official API of GAP".
> > > >>
> > > >> This turns out to create a bit of a problem: The GAP function
> > > >> IsDocumentedWord, which this code uses to determine if a function is
> > > >> "documented", works by searching for the function's name in all
> > > >> documentation known to GAP.  By default this is just the standard GAP
> > > >> reference docs.  However, if you have any GAP packages installed, it
> > > >> will *also* search the docs for those packages.
> > > >>
> > > >> If you have lots of packages installed that means this is *extremely*
> > > >> slow, even if we're just searching for terms that we only care about
> > > >> being in the main GAP docs.
> > > >>
> > > >> Though perhaps it is a faulty assumption that this is "the official
> > > >> API of GAP" in the first place.  Or at the very least, perhaps we
> > > >> don't really need to care about whether or not the function is
> > > >> "documented", and that just returning all global functions is good
> > > >> enough for a first pass.
> > > >>
> > > >> But I'm not sure.  Volker wrote this code originally so he would know
> > > >> best.  But what do we want to present as the "API" provided by Sage's
> > > >> GAP interface?
> > > >>
> > > >>
> > > >>
> > > >>
> > > >>
> > > >>
> > > >> [1] 
> > > >> https://gitlab.com/sagemath/sage/blob/master/src/sage/libs/gap/assigned_names.py#L118
> > > >> [2] 
> > > >> https://gitlab.com/sagemath/sage/blob/master/src/sage/libs/gap/all_documented_functions.py
> > > >
> > > > --
> > > > 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.
> >
> > --
> > 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.

-- 
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