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.

Reply via email to