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