On Mon, Dec 17, 2018 at 4:07 PM E. Madison Bray <erik.m.b...@gmail.com> wrote: > > On Fri, Dec 14, 2018 at 2:33 PM Volker Braun <vbraun.n...@gmail.com> wrote: > > > > Afair the all_documented_functions is documenting the starting point of our > > list of hardcoded tab-completions. At one point I went through it by hand > > and tweaked it, though. The module cannot be default imported for the > > reasons you mention. But I think its useful to have the code around since > > it is far from obvious what GAP symbols are useful entry points that should > > be accessible from Sage. GAP only has a single flat namespace and its > > littered with private stuff... > > It's a fair point that that code *might* be useful for occasionally > hard-coding a list of useful GAP symbols. But in that case it would > be code that is not run by importing a module, but rather a function > that is used to generate a list of functions, sort of like (I think) > we do for PARI (but we would just use it at runtime). > > However, even if used like that, the present code that lists > "documented functions" returns some 10000 functions, a great deal more > than the ~1400 we have hard-coded in sage.libs.gap.gap_functions. > > It should also be used in such a way that it can be kept up-to-date > regularly. As I mentioned elsewhere in this thread, I found that the > existing list was quite outdated and contained some entries that > weren't even functions (such that trying to libgap.__getattr__ them > raised an exception). > > So unless someone has a concrete plan for dynamically generating a > "standard" GAP API, the current code still isn't worth keeping around, > at least in its current state.
I suppose we at least should rename these files, prefixing them with `_`, to make clear it's not something to be used without much thought. > > > > On Friday, December 14, 2018 at 5:55:24 AM UTC-5, Dima Pasechnik wrote: > >> > >> On Fri, Dec 14, 2018 at 10:19 AM E. Madison Bray <erik....@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): > >> > >> sage: libgap.SymmetricGroup(3).Order() # SymmetricGroup is in the list > >> 6 > >> sage: libgap.ImfMatrixGroup(12,3) # ImfMatrixGroup is not there > >> --------------------------------------------------------------------------- > >> AttributeError Traceback (most recent call last) > >> <ipython-input-8-86e9cd3d6fbf> in <module>() > >> ----> 1 libgap.ImfMatrixGroup(Integer(12),Integer(3)) > >> > >> /mnt/opt/Sage/sage-dev/local/lib/python2.7/site-packages/sage/misc/lazy_import.pyx > >> in sage.misc.lazy_import.LazyImport.__getattr__ > >> (build/cythonized/sage/misc/lazy_import.c:3536)() > >> 320 True > >> 321 """ > >> --> 322 return getattr(self.get_object(), attr) > >> 323 > >> 324 # We need to wrap all the slot methods, as they are not > >> forwarded > >> > >> /mnt/opt/Sage/sage-dev/local/lib/python2.7/site-packages/sage/libs/gap/libgap.pyx > >> in sage.libs.gap.libgap.Gap.__getattr__ > >> (build/cythonized/sage/libs/gap/libgap.c:6229)() > >> 668 g = make_any_gap_element(self, gap_eval(name)) > >> 669 else: > >> --> 670 raise AttributeError(f'No such attribute: {name}.') > >> 671 > >> 672 self.__dict__[name] = g > >> > >> AttributeError: No such attribute: ImfMatrixGroup. > >> > >> sage: libgap.function_factory('ImfMatrixGroup')(12,3) # but this works > >> ImfMatrixGroup(12,3) > >> > >> ---- > >> Best, > >> Dima > >> > > >> > On Tue, Dec 11, 2018 at 4:52 PM Volker Braun <vbrau...@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+...@googlegroups.com. > >> > > To post to this group, send email to sage-...@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+...@googlegroups.com. > >> > To post to this group, send email to sage-...@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.