Lazy initialization of libgap
Gap class that implements the (effectively singleton)
libgap instance variable in
initialize() (the function which initializes libgap for the process) in its
Because of this, it was impossible to import it without causing libgap to be initialized, creating slowdown during Sage initialization. The tradeoff is that most code in Sage that uses the libgap interface has to awkwardly use inline imports of
from sage.libs.gap.libgap import libgap all over the place.
I would like to do away with that, especially for work on #18267.
Gap.__init__() and instead carefully places calls to
initialize() just in the few places where it's absolutely crucial to ensure libgap is initialized first (specifically in code paths that users and developers are actually intended to use directly; it is not added directly to every single function that uses GAP objects).
This sacrifices some simplicity in implementation of the libgap interface for simplicity in using it, which I think is crucial for updating more code in Sage to use it over the pexpect interface.